当前位置: 首页 > article >正文

使用网络爬虫爬取豆瓣电影网站的数据

在这里插入图片描述


👨‍💻个人主页:@开发者-曼亿点

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 曼亿点 原创

👨‍💻 收录于专栏:机器学习

🅰

请添加图片描述


文章目录

    • 🅰
    • 前言
    • 🎶 一、网络爬虫概述
    • 🎶 二、requests库
      • 1.发送HTTP请求
      • 2.获取HTTP响应的内容
        • 结束语🥇


前言

   在当今这个数据大爆炸的信息时代,海量的互联网数据蕴含着巨大的价值,用户如何自动高效地从互联网中获取感兴趣的信息是一个亟待解决的问题。在这样的环境和需求的影响下,网络爬虫应运而生,它为互联网数据的采集提供了新的方法。本项目将介绍使用Python编写网络爬虫的方法。
   豆瓣用户可对豆瓣电影中“看过”的电影进行“很差”到“力荐”评价,豆瓣会根据每部影片看过的人数及该影片所得的评价等综合数据,通过算法分析产生豆瓣电影Top250。本任务将带领大家编写Python程序,利用requests库,爬取豆瓣电影Top250网站的数据。


🎶 一、网络爬虫概述


  网络爬虫又称为网络蜘蛛或网络机器人,是一个用来实现自动采集网络数据的程序。如果将互联网比作一张蜘蛛网,数据便存放于蜘蛛网的各个节点,而网络爬虫就可以比作在网上爬来爬去的蜘蛛,沿着网络抓取数据。
  网络爬虫不仅能为搜索引擎采集网络信息,还可以定向采集某些网站中的特定信息,如学术网站的论文、团购网站的价格及点评、各种电商平台的商品信息、招聘信息、租房信息、微博评论等。

网络爬虫是一个自动化的程序,它的基本工作流程如图所示
在这里插入图片描述

网络爬虫的基本工作流程可分为爬取网页、解析网页和存储数据3个步骤。
  (1)爬取网页:发送构造的HTTP请求,获取包含所需数据的HTTP响应(即网页源代码)。Python提供的爬取网页的库有urllib、requests、selenium等。
  (2)解析网页:根据网页结构,分析HTTP响应的内容,从中提取想要的数据。Python提供的解析网页的库有re(正则表达式)、lxml、beautifulsoup4等。
  (3)存储数据:将提取的数据保存起来以便后续使用。保存数据的方式有很多种,可以将其简单保存到JSON、CSV或TXT文件中,也可以保存到数据库中,如MySQL和MongoDB等。


🎶 二、requests库


  Python的标准库urllib提供了大部分HTTP功能,但使用起来较烦琐。而requests库是对urllib库的进一步封装,使用更加便捷。它的最大优点是,程序编写过程更接近正常的URL访问过程。但requests库不是Python内置的标准库,使用前需要安装。

【温馨提示】:统一资源定位符(uniform resource locator,URL)是对可以从互联网上得到的资源位置和访问方法的一种简洁表示,是互联网上标准资源的地址。

  requests库提供了很多功能特性,几乎涵盖了所有Web服务的需求,包括URL获取、HTTP长连接和连接缓存、HTTP会话、浏览器式的SSL验证、身份认证、Cookie会话、文件分块上传、流下载、HTTP(S)代理功能、连接超时处理等。有关requests库的更多介绍可访问http://docs.python-requests.org/。下面着重介绍使用requests库实现发送HTTP请求和获取HTTP响应的方法。

1.发送HTTP请求

  requests库提供了几乎所有的HTTP请求方法,包括GET、POST、HEAD、PUT、DELETE、CONNECT、OPTIONS和TRACE等。其中,最常用的是GET方法和POST方法。平时打开网站一般使用的是GET方法,也就是请求页面,该方法通过get()函数实现,其函数原型如下。

get(url, params=None, **kwargs)

(1)url:请求的URL,这是必传参数,其他都是可选参数。
(2)params:字典或字节序列,作为参数增加到url中。
(3)**kwargs:控制访问的参数,如headers、cookies、timeout和proxies等。

2.获取HTTP响应的内容

   使用请求方法发送HTTP请求后,返回一个Response类型的对象,其提供的属性和方法如表所示。
在这里插入图片描述

【例11】 爬取在豆瓣网站中搜索“Python”的内容,输出响应的内容。
【问题分析】 在爬取网页的内容前,可以先查看和分析网页的HTTP请求和响应,获取构造请求的信息和响应的内容。使用Google Chrome浏览器打开豆瓣网站搜索“Python”,查看HTTP请求和响应的过程如下。
打开Google Chrome浏览器,访问https://www.douban.com/。右击页面空白处,在弹出的快捷菜单中选择“检查”选项,打开浏览器的开发者工具窗口,然后选择“Network”选项。在打开的豆瓣网站中搜索“Python”关键词,即可在开发者工具窗口中显示请求记录(见图),其中每一条记录都代表一次发送请求和接收响应的过程。
在这里插入图片描述

在记录列表中,选择“search?q=python”选项,然后在其右侧打开的界面中选“Headers”选项,即可显示HTTP请求和响应的详细信息,如图所示。
在这里插入图片描述
   完成本案例,可首先定义字符串url,赋值为https://www.douban.com/search,定义字典paramsvalue,赋值为{‘q’: ‘Python’};然后使用get()函数发送HTTP请求,参数为url和paramsvalue,输出响应状态码和请求头;然后定义字典headersvalue设置User-Agent信息,再使用get()函数发送HTTP请求,参数为url、paramsvalue和headersvalue,并输出响应状态码、请求头和文本类型的响应内容。
【运行代码】

import requests					#导入requests库
paramsvalue = {'q': 'Python'}			#定义字典
#将paramsvalue作为参数增加到url中并发送请求,将响应赋值给r
r = requests.get('https://www.douban.com/search',
                 params=paramsvalue)
print(r.status_code)				#输出响应状态码
print(r.request.headers)				#输出请求头
#定义请求头信息
headersvalue = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
}
#发送HTTP请求,并将响应赋值给r
r = requests.get('https://www.douban.com/search',
                  params=paramsvalue, headers=headersvalue)
print(r.status_code)				#输出响应状态码
print(r.request.headers)				#输出请求头
print(r.text)					#输出文本类型的响应内容

【运行结果】 程序运行结果如图所示
在这里插入图片描述

从图可以看出,例1第一次发送HTTP请求时,请求头中的User_Agent信息为Python的requests库的版本信息,表示爬虫程序发送该请求,且响应状态码是418,表示禁止爬虫程序爬取该网站;而第二次设置为浏览器信息,响应状态码为200,表示伪装成浏览器后成功爬取网站。所以,设置请求头参数是应对反爬虫机制的一种有效方法。

使用Google Chrome浏览器打开豆瓣电影Top250网站(网址https://movie.douban.com/top250),可以看到每一页只显示25个电影,如果想要获取所有的电影(250个),需要获取总共10页的内容。10个网页的地址如下。
https://movie.douban.com/top250
https://movie.douban.com/top250?start=25&filter=
https://movie.douban.com/top250?start=50&filter=
...
https://movie.douban.com/top250?start=220&filter=
https://movie.douban.com/top250?start=225&filter=
通过分析发现,每翻一页,网页地址中的start参数会加上25。
完成本任务,须循环10次。在循环中,首先定义url字符串;然后发送HTTP请求,并输出响应状态码和请求的URL;最后将响应内容保存到TXT文件中。

结束语🥇

以上就是机器学习
持续更新机器学习教程,欢迎大家订阅系列专栏🔥机器学习
你们的支持就是曼亿点创作的动力💖💖💖
请添加图片描述


http://www.kler.cn/news/359689.html

相关文章:

  • Kimi AI助手重大更新:语音通话功能闪亮登场!
  • AI大模型是否有助于攻克重大疾病?
  • 数据仓库宽表概述
  • 作用域的类型与注意事项
  • SVM算法
  • VSCode编译器改为中文
  • html全局属性、框架标签
  • npm 加速,命令行修改国内镜像源【附带国内最新几个镜像】超简约版~
  • 最佳副屏串流解决方案:如何低成本打造电脑拓展副屏?
  • HTml + CSS 核心笔记 (八)
  • 【C++刷题】力扣-#119-杨辉三角II
  • MySQL备份和还原,用mysqldump、mysql和source命令来完成
  • React中的Hooks钩子
  • Node + HTML搭建自己的ChatGPT [基础版]
  • 农合生活平台用户量已突破5万人大关。
  • vue中this.$nextTick()方法
  • Prometheus 抓取 nginx 访问日志的指标
  • @MassageMapping和@SendTo注解详解
  • Shell并发执行:提升脚本效率的终极指南
  • 深入理解 Kafka