2020-03-18 京东图书的数据爬取

SCRAPY项目-京东图书

爬取目标:

京东图书的书名、作者、价格、销量

创建项目

scrapy startproject jd 

cd到jd目录下

scrapy genspider jdbook jd.com

修改start_urls为 https://book.jd.com/booksort.html

爬取思路

大分类:小说、文学、青春文学等
->小分类:小说-中国当代小说、中国近代小说等
-->书籍详情页url
--->提取所需信息

第一步

从response中提取大分类信息与所属小分类链接:

response.xpath().extract()

将爬取到的小分类链接进行进一步请求:

for url in dd_url:
    yield scrapy.Request(
        url='http:'+url,
        callback=self.parse_book_list,
        meta={'item': copy.deepcopy(item)}
)

创建parse_book_list,用来处理小分类链接下的图书列表,获取图书详情页链接

def parse_book_list(self, response):

第二步

完善parse_book_list函数,获取图书详情页链接

response.xpath().extract()

将爬取到的图书详情页进一步传递到下一个函数parse_book_detail

yield scrapy.Request(
                url=li_url,
                callback=self.parse_book_detail,
                meta={'item': copy.deepcopy(item)}
            )

同时创建该函数

def parse_book_detail(self, response):

第三步

完善parse_book_detail函数,获取图书详情数据,并传递到pipeline中

yield item

第四步

在pipeline中处理数据,如下载数据到本地数据库或本地文件中

    def process_item(self, item, spider):
        with open() as f:
            f.write()
            f.close()
        return item

一些细节

翻页功能可以有两种办法实现:

  1. 直接修改图书列表页的链接中的page参数,如将下网址中的page=2改为page={}并用format赋值

    https://list.jd.com/list.html?cat=1713,3258,3297&tid=3297&page=2&sort=sort_rank_asc&trans=1&JL=6_0_0#J_main
    
    'https://list.jd.com/list.html?cat=1713,3258,3297&tid=3297&page={}&sort=sort_rank_asc&trans=1&JL=6_0_0#J_main'.format(i)
    
  2. 在图书列表页找到“下一页”按钮并提取网址

    '//*[@class="pn-next"]/@href'
    

注意尾页的判定即可

item参数传递注意使用深拷贝

import copy
copy.deepcopy(item)

你可能感兴趣的:(2020-03-18 京东图书的数据爬取)