对于京东图书的爬取https://book.jd.com/booksort.html
步骤:
- 访问主页地址,获取大分类列表
- 循环大分类,获取小分类列表
- 循环小分类,分别访问url,获取图书列表
- 获取所需信息,构建next_page,生成一个新的请求
步骤很简单,中间有一些需要注意的地方:
① element和获取的请求有些许不同,如果不成功,多半是这边的问题
② url记得加上 https:
③ 再循环小分类列表的时候,需要共享item[“big_cate”],所以在构造新请求的时候,记得使用deepcopy深拷贝隔离。
④ 在parse_list函数中需要在一开始deepcopy一份item使用,因为在构造下一页请求的时候,需要传递函数初始的item
⑤ 下一页地址在请求结果中不存在,我在请求中找到了一个存放总页数的标签,根据url规律,构造了一个next_url地址。
⑥ 这个总页数标签获取,经常为None,需要将settings中设置下载延迟DOWNLOAD_DELAY = 2
, 或者也可以使用代理。
代码如下:
import scrapy
from copy import deepcopy
class JdSpider(scrapy.Spider):
name = 'jd'
allowed_domains = ['jd.com']
start_urls = ['https://book.jd.com/booksort.html']
def parse(self, response):
# 1. 获取大分类列表
big_cate_list = response.xpath("//div[@class='mc']//dt")
# 2. 循环大分类,获取小分类列表