《精通Python网络爬虫》第18章 博客类爬虫项目代码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zfs2008zfs/article/details/82825213

《精通Python网络爬虫》第18章讲的是博客类爬虫项目实战,目标网站是和讯博客,这是一个很好的练手项目。
通过这个项目,收获不小:

  1. 初步接触Google浏览器强大的开发调试功能,包括对JS的调试,DOM断点调试,Newwork监视网络连接
  2. 爬虫时‘点击数’和‘评论数’这两个字段爬出的结果是0,由于对html语言不熟悉,通过分析,发现这两个字段是通过javascript获取并修改元素的值来实现的,修改之后把javascript代码也删除了,导致Google浏览器DOM断点调试(“break on”–>“subtree modification”)也不会中断,后来在Google浏览器Newwork中发现链接(http://click.tool.hexun.com/linkclick.aspx?blogid=11511332&articleids=115716166-115699791-115679739-115604201-115570728-115553671-115514688-115480573-115469853-115436422-115716166-115699791-115679739-115604201-115570728-115553671-115514688-115480573-115469853-115436422 )才看出端倪
  3. scrapy shell命令很强大,可以在一边开发一边测试css或xpath表达式提取结果是否跟预期一样,并且可以传入参数修改header,例如:
scrapy shell -s USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0" https://blog.csdn.net/zfs2008zfs
  1. 书中在提取‘点击数’和‘评论数’使用正则表达式匹配,我使用了字符串的split方法
  2. 应对反爬虫常用代码片段:
import urllib.request
import urllib.error
req = urllib.request.Request('爬虫目标的链接')
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0')
req.add_header('Referer','与爬虫目标相关')
try:
    data = urllib.request.urlopen(req).read()
    data = str(data).replace('"','')
    #print(data)
    results = data.split('$')[2:]
    for result in results:
        temp_list = result.replace('(','').replace(')','').replace(';','').replace("'",'').split(',')
        id_result[temp_list[0]]=temp_list[1]
except urllib.error.URLError as e:
    if hasattr(e,'code'):
        print(js_url,e.code)
    if hasattr(e,'reason'):
        print(js_url,e.reason)
  1. 发爬虫的机制有多种,包括对User-Agent和Referer字段的检测,在使用scrapy shell命令时要注意返回结果是不是200。另外,scrapy不能执行JavaScript代码,所以很有可能scrapy中response与google浏览器看到的源代码不一致,要特别注意。

最后,附上本人写的代码:https://github.com/zhangjiuling/hexunpjt

参考文章:https://blog.csdn.net/godot06/article/details/81587242

猜你喜欢

转载自blog.csdn.net/zfs2008zfs/article/details/82825213