python抓取网页数据(Python3网络爬虫基本操作(二):静态网页抓取(组图))

优采云 发布时间: 2021-11-29 08:09

  python抓取网页数据(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 页。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线