案例总结:京东图书信息爬取

代码地址:https://github.com/Fonzie9527/spider_JDbooks

爬取起始url:https://book.jd.com/booksort.html

爬取需求:抓取京东图书的相关信息

抓取目标字段:

  • 大分类,大分类页面url小分类,小分类页面url
  • 封面图片连接,详情页面url
  • 作者,出版社,出版时间
  • 价格,书名

案例总结:京东图书信息爬取_第1张图片

 

案例总结:京东图书信息爬取_第2张图片

 


注意点

代码编写过程:

  1. 先根据 scrapy 框架写普通的爬虫,spider模块中,需要继承的基类为scrapy.spider
  2. 然后根据 scrapy_redis 改写为分布式爬虫,根据官方给出的 dmoz案例,需要继承的基类 为 RedisSpider

 

要点和注意点:

  1. 爬虫解析响应的工具使用xpath,相关基本语法要熟悉,不熟悉临时百度也行
  2. 图片链接 cover_url 有的时候爬取不到,这是xpath的原因,在python中可以用try ... except语句处理一下
  3. 爬取的过程也是通过响应中的链接,深入下一层进行爬取。需要发送请求,发送请求的方法为 yield scrapy.Request()。这是一个请求对象,返回给scrapy引擎,里面具体的参数,查文档或者看源码。
  4. yield scrapy.Request() 里面有一个meta参数值得一提:作用是将上一层爬取到的字段信息,送到下一层url中去,供爬取下一层url返回的响应时可以继续使用。
  5. 啥时候实例化模型item呢?比较好的是爬取到最后一层,所有字段的信息都搜集的差不多了,再实例化。
  6. 除了“价格”,其他的字段都在响应中可以拿到(在chrome中,右键---点击“检查”---切换到“network”选项卡---找到html文档,搜索查找一下即可知道这些信息是否在响应中就有)
  7. “价格” 这个字段,直接在响应中是没有的,而是js生成的。先 在chrome中,search一下价格,发现这些价格的数字来源于 js文件。查看chrome,获取到该js文件的请求url。会发现这个url中有好多查询字符串的参数,经过测试发现只有pduId 和 SkuIds参数是有效的。pduId是不变的,直接拿来。SkuIds参数值是可以从原始html响应中获取的。因此自行构造一个请求js文件的url。请求回的是一个json格式的数据。通过python中的json模块处理得到相关的价格数据。
  8. 在请求第7条中,js文件时,发现请求的域名已经不是jd.com,记得修改一下 allowed_domains,添加域名
  9. 记得在某个解析函数 def parse_xxx中,将item模型返回给scrapy引擎 :yield item

 

最后,写好的普通爬虫需要修改成为 scrapy_redis 分布式爬虫, 修改步骤:

  1. 导入分布式爬虫类 RedisSpider
  2. 修改爬虫的继承
  3. 注销allowed_domainsstart_urls
  4. 重写__init__()方法(可选)
  5. 添加redis_key
  6. 使用官方案例的配置文件进行修改
  7. 配置redis数据库地址

 

 

 

 

 

 

 

你可能感兴趣的:(爬虫)