代理ip网站源码_python 爬取搜狗微信文章(代理池+re解决跳转链接问题)

作者最近在学习python爬虫,在爬取微信文章这个实战项目中遇到了一些小问题,所以写这篇文章来记录一下,顺便分享一下爬取过程。

  • 整体思路

我们选择从搜狗的微信界面(‘https://weixin.sogou.com/’)来获取微信文章的基本信息,由于搜狗有反爬措施,采用代理池,先将搜狗搜索的结果页的源码爬取,之后解析出这一页的文章链接,翻页,继续解析至最后一页,最后访问文章链接获取源码提取所需信息保存到MongoDB中

  • 准备工作

代理池ProxyPool:代理池的作用是用来应对sougo的反爬虫措施,当你快速翻页时搜狗会跳出验证码识别,这时的网页请求会由200变成302的错误状态,这表示现在的ip被搜狗察觉并且不能再使用它来爬取。

代理池中有许多免费公开的ip,我们从代理池中不断获取ip来保证过程中有可用的ip供我们使用,这里使用的是github上公开的代理池代码附上链接,链接中有使用方法,大家可以自行下载运行:‘https://github.com/Python3WebSpider/ProxyPool’

第三方库:除了代理池的requirement.txt中的库,还需要用到re库(正则表达式库)requests库(get网页源码)BeautifulSoup(解析)pymongo(mongodb数据库存取)

MongoDB数据库:非必须,可以选择其它的数据库或者文件类型存储

第一步:获取搜索结果界面的源码

由于是静态页面,用requests库就可以很方便的爬取,但需要注意两点:1.搜索中如果不登录vx只能爬取十页的内容 2.需要在出现302的状态码时从代理池中获取新的ip

解决第一个问题需要对headers进行设置,这里简单得设置User-Agent和Cookie达到需求

解决第二个问题采用从代理池的端口中获取ip

附代码及注释:

d314689301ca160d30ed11f01212b3e2.png2b53f95243270181ff7853a70b6f70c6.png248f00dc9438bc7b126daa762eca5a47.png

第二步:实现翻页,获取每一页的源码

  • 这里只需要改变页数,也就是之前的ke参数即可

851e1a03174c571866b0adb637229ff6.png 通过运行以下代码即可获取100页的源码 b84c7869e1c264b53824b14986796bed.png

第三步:解析尝试获得文章的url

  • 此时我们已经获取了每一页的html变量,现在对每一页的html结构进行分析,找到可能存储着文章url的信息

b6ea670e680882d9c0beea039832483d.png通过右键检查链接,我们发现每一个文章信息都储存在class为‘news-list’下的< li >中,而链接在< li >的< a >标签的href属性中,点击链接,我们成功跳转到了文章界面6e534cc2981549a317fff2cb9062de1d.png9ec8a4e5c67329f3a40e2b78b999899e.png

然后当我进行下一步,获取该url的源码时,我发现不是我想要的界面第四步:通过re获得真实url

此时我并没有管这个url爬出来的是什么,然后终于发现了两者的url是不同的,显然文章的页面是异步加载出来(好像是这么叫??初学俺也不懂)。

而面临这种情况,我脑子里只有分析ajax和用selenium,但我要分析1000页的ajax吗…so我只尝试了selenium,但selenium用谷歌驱动时会直接被搜狗发现是自动化程序,原因好像是有的js文件中包含着驱动文件的名字(经后续其它项目学习中发现有时使用火狐驱动不会被发现)所以这两种方法初步尝试失败

这时我注意到了跳转url的源码有一部分长这样

3fc289aff63be4321b0d083322e98acf.png

然后我对比了一下跳转后的最终url就是这一串连起来,我高兴了起来

看到这格式整齐的字符串,一串正则表达式就敲了出来:

a4e980ac1ea1e066b095dcad5dbd972e.png

至此我们得到了文章的真正url

第五步:从真实url获取想要的文章信息

这里只解析了简单的文章名称、公众号名称,解析方法和查找跳转url那里相同,想获取更多的信息也可以自己再加

5c998713c89c3074fd71aa2ffc6326a0.png

第六步:存储到数据库

  • 这里因为是字典类型,所以就存储到了MongoDB,也可以选择不用字典存储然后写入别的文件。这里需要配置一下MongoDB和写一下写入的方法

c365e604fd53cc3a5314fd564ebbaf88.png

运行

  • 此时注意,运行前要先运行代理池,不然无法获取代理ip

  • 运行代码及数据库截图如下:

d975321ef7af6d683b5074e9a1c5ce32.png eab502878393decb4d2f98a44c3e4742.png

da49dd1d06bbbbca68903d611051dfd8.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值