程序员吐槽段子(程序员通过网络爬虫获取糗事百科搞笑段子)

最近一直在学习网络爬虫, 从最开始的用urllib2 bs4模块一行一行写爬虫, 到现在掌握scrapy爬虫框架, 再到学习如何破解反爬虫, 对网络爬虫有了基本的了解。今天看糗百段子,突然想起以前想看段子而手机流量又不够的时候想着有一天能在家里把段子下载到手机上离线看就好了。现在学了爬虫,感觉愿望可以实现了。 于是今天就以爬取糗事百科搞笑段子为例, 对之前的学习做个总结。

这个例子还是基于python, 用的scrapy框架。 爬取搞笑段子原理其实很简单: 打开糗事百科, 找到入口url(每一页为一个入口), 然后遍历所有网页, 获取搞笑段子信息保存到本地文件中。

程序员吐槽段子(程序员通过网络爬虫获取糗事百科搞笑段子)(1)

首先打开糗事百科页面, 我准备爬取纯文字和热图两个分类。 观察两个分类每一页url有如下特征:

如此可以通过第一个url和一个for循环构建出剩下的所有url。

知道如何构建入口url后, 观察下页面的html源码, 每个段子的作者、内容等信息可以用xpath很容易的提取出来。 如:作者=‘//div[@class="article"]//h2/text()’; 内容='//div[@class="article"//span/text()]'

程序员吐槽段子(程序员通过网络爬虫获取糗事百科搞笑段子)(2)

经过以上分析后, 剩下的就是写代码实现了。 为了快速爬取又不被反爬虫机制发现, 这里使用了代理ip机制, 主要代码贴上来

这段代码是用python重写scrapy中间件, 主要实现下面两个功能:

  1. 改写user-agent, 破解基于user-agent原理的反爬虫机制

  2. 每次请求都从代理ip池中随机拿一个来用, 这样请求间隔就可以设置的非常短, 爬取速度变快而不用担心ip被封禁了。 说明下alive.txt中的内容是上篇文章中爬取到的代理ip并被验证为有效的代理ip

程序员吐槽段子(程序员通过网络爬虫获取糗事百科搞笑段子)(3)

这段代码是pipelines.py, 用来把爬取到的段子信息保存到本地的txt文档里, 其中图片会下载到IMG目录下

程序员吐槽段子(程序员通过网络爬虫获取糗事百科搞笑段子)(4)

下面代码是爬虫的实现, 主要是通过url获取到网页html, 然后通过xpath提取出搞笑段子

程序员吐槽段子(程序员通过网络爬虫获取糗事百科搞笑段子)(5)

主要的实现就是这样的, 写出来供大家参考, 我最终爬取出来的结果是这样的:

这格式纯文字的爬取结果:

程序员吐槽段子(程序员通过网络爬虫获取糗事百科搞笑段子)(6)

这个是热图的爬取结果, 图片都保存在同级目录下的IMG目录下

程序员吐槽段子(程序员通过网络爬虫获取糗事百科搞笑段子)(7)

写这篇文章的目的是对前端时间学习有个总结, 同时期望自己的些许经验能让正在学习爬虫的朋友有个参考

欢迎转载!

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页