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
一些细节
翻页功能可以有两种办法实现:
直接修改图书列表页的链接中的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)
在图书列表页找到“下一页”按钮并提取网址
'//*[@class="pn-next"]/@href'
注意尾页的判定即可
item参数传递注意使用深拷贝
import copy copy.deepcopy(item)