urllib爬虫库使用教程(二):糗事百科抓取实例(附源码

东尧爱分享

这是东尧每天一篇文章的第35天

东尧写文章的目标:分享东尧的经验和思考,帮你获取物质和精神两方面幸福。

上次的urllib库教程一中我们已经学习了urllib库的一些基本操作,那么今天东尧就用糗事百科网站的抓取实例来教大家如何抓取一个网页的数据。

1

创建通用网页下载函数

在编写糗百的抓取代码之前,我们先写一个通用的网页下载函数,这样,无论以后我们需要抓取哪个网站的内容,都可以直接使用这个函数来下载网页,将网页内容传入到python变量中,方便后续重复使用。

函数用到的参数:

url

要下载的url

timeout

请求超时时间,单位/秒。可能某些网站的反应速度很慢,所以需要一个连接超时变量来处理。

user_agent

用户代理信息,可以自定义是爬虫还是模拟用户

proxy

ip代理(http代理),访问某些国外网站的时候需要用到。必须是双元素元组或列表(‘ip:端口’,‘http/https’)

num_retries

失败重试次数

return

HTML网页源码

2

糗事百科抓取实例

要下载的网页首地址:https://www.qiushibaike.com/text/

需求分析:

1.需要提取出发段子的作者,段子的内容,好笑数量以及评论数

2.将每条结果保存在字典中,然后最终保存为json文件

我们可以看到糗事百科的“文字”栏目是按照下图这样的小块来分布的,那么我们可以通过对这种小块的抓取将内容归类,一个块为一类,一类中包含了“作者、糗事内容、好笑数量、评论数量”。

为什么要这样分块抓取内容,而不是一次性的抓取完作者、一次性抓取完糗事内容数据呢?这是因为有可能由于某些原因使得一些作者或内容无法抓取到,那么在最终的抓取结果中,由于中间缺少了部分内容,就无法做到按“作者、糗事内容、好笑数量、评论数量”这样的关系一一对应,整个抓取结果就是混乱的。所以要按分区块的方式来抓取,保证内容的一致性。

接下来是查看源代码中分块的代码。

右键单击“审查元素”可以看到在源代码中,一个小块是以“

”开头,以“

”结尾的。那么我们在正则匹配时就可以先将页面上的小块匹配出来,然后通过for循环再从每个小块中匹配各自的元素内容。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180512G1A2LG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券