python抓取网页数据(Python3网络爬虫基本操作(二):静态网页抓取(组图))
优采云 发布时间: 2021-11-29 08:09python抓取网页数据(Python3网络爬虫基本操作(二):静态网页抓取(组图))
Python3网络爬虫的基本操作(二):静态网络爬虫
一.前言
Python版本:Python3.X
运行环境:Windows
IDE:PyCharm
看了上一篇博文,相信大家对爬虫有了一定的了解。在本文中,我们将解释如何抓取静态 Web 资源。(本人也是初学爬虫,简单总结一下所学分享给大家,如有错误请指出,谢谢!)
二.静态网页爬取1.安装Requests库
打开cmd,输入:(详细安装教程请参考之前的博客)
pip install requests
2.获取网页对应的内容
在Requests中,常见的功能就是获取某个网页的内容。现在我们还是以豆瓣()为例。
import requests
link = "https://movie.douban.com/chart"
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'
}
req = requests.get(link, headers=headers)
print("响应状态码:", req.status_code)
print("文本编码:", req.encoding)
print("响应体:", req.text)
这将返回一个名为 req 的响应对象,我们可以从中获取我们想要的信息。上面代码的结果如下:
(1)req.status_code 用于检测响应状态码。
(所有状态码详情:%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin)
(2)req.encoding 是服务器内容使用的文本编码格式。
(3)req.text 是服务器响应内容。
(4)req.json() 是 Requests 中内置的 JSON *敏*感*词*。
3.自定义请求(1)获取请求
有时为了请求特定的数据,我们经常需要在 URL 中添加特定的数据。例如,在构造URL时,我们通常将数据放在一个问号后面,并以key/value的形式放在URL中。(这里是把start=0传给)
在Requests中,可以直接将参数放入字典中,使用params构造URL。
例如:
import requests
key = {
'start': '0'}
req = requests.get('https://movie.douban.com/top250', params=key)
print("URL正确编码", req.url)
操作结果:
(2)自定义请求头
请求标头 Headers 提供有关其他实体的请求、响应或发送的信息。对于爬虫来说,请求头非常重要。如果没有指定请求头或请求头与实际网页不同,则可能无法获得正确的结果。我们如何获取网页的请求头?
我们以()为例,进入网页检查页面,下图中箭头所指的部分就是网页的请求头部分(Requests Headers)
提取重要部分,编写代码:
import requests
link = "https://movie.douban.com/top250?start=0"
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36',
'Host':'movie.douban.com'
}
req = requests.get(link, headers=headers)
print("响应状态码:", req.status_code)
(3)超时
有时候爬虫会遇到服务器长时间不返回,那么程序就会一直等待,导致程序执行不顺畅。因此,您可以在超时参数设置为等待秒数后,使用Requests 停止等待响应。(我们一般把这个值设置为20秒)
这里我们设置秒数为0.0001秒,看看会抛出什么异常:
import requests
link = "https://movie.douban.com/top250?start=0"
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36',
'Host':'movie.douban.com'
}
req = requests.get(link, headers=headers, timeout=0.0001)
print("响应状态码:", req.status_code)
操作结果:
三.项目实践
举个例子来练习,目的是获取起点中文网月票榜上一百本书的名字。
1.网站分析
打开起点中文网站月票列表的网页,使用“check”查看网页的请求头,写上我们的请求头。
请求头:
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36',
'Host': 'www.qidian.com'
}
第一页只有 20 本书信息。如果要获取全部 100 本书的信息,总共需要获取 5 页。