1.创建Scrapy项目、生成爬虫
CMD下进入Scrapy安装目录,使用startproject命令创建
scrapy startproject dangdangSpider
- 目录自动生成项目文件即创建成功
使用genspider生成爬虫
scrapy genspider dangdang -[默认域名]
- 生成spiders目录与dangdang.py
!!!爬虫名不与项目名重复
2.定义爬取对象
确定start_urls
start_urls = ['http://category.dangdang.com/cid4003844.html'] # 第一个采集的URL
- urls 可有n个
后期翻页实现
start_urls = [f'http://category.dangdang.com/pg{page}-cid4003844.html'
for page in range(1, 101)] # 翻页采集URL
- range [stop]应比总页数+1
3.Xpath基础选取
选择器定义
selectors = response.xpath('//p')
表达式 | 含义 |
---|---|
div | 最小<div> |
//table | <table> |
//@title | 拥有title=" "标签 |
//p/tr[2] | <p>下第二个<tr> |
//p[@title="price"] | 拥有有title="price"的<p> |
//td[3]/text() | 第三个<td>的所有文本 |
//p//a[@name="itemlist-title"]/@title | <p>下拥有name="itemlist-title的<a>的title属性值 |
- 为实现爬多组数据,可在for内分布选取
4.Xpath高级选取
上步已选取//p for的作用是可以选取不同标签下的几组数据,通常情况下都这样做
for selectors in selectors:
title = selectors.xpath('//a[@name="itemlist-title"]/@title').get() # 选取所有class属性为‘name’的a标签
新版 get() 与extract()方法无大体区别 此处均使用返回list的get()方法 衍生方法getAll()该项返回String值
这里爬取三组数据上为商品标题,下为商品链接和商品评论条数
link = selectors.xpath('//a[@name="itemlist-title"]/@href').get()
comment = selectors.xpath('//a[@name="itemlist-review"]/text()').get()
可以print一下测试数据爬取是否成功
print(title, link, comment)
5.实现翻页
选取带有class="next"的<li>标签下<a>标签的href属性值
怎么找翻页? Chrome浏览器 Ctrl+Shift+C 单机下一页按钮 找链接
if next_page:
next_page = response.xpath('//div//ul//li[@class="next"]//a/@href').get()
将找到的next_page拼到selectors上
next_url = response.urljoin(next_page)
回调函数,使程序继续运行
yield scrapy.Request(next_url, callback=self.parse)
回到爬虫过程中为项目返回一个items
items = {
'title': title,
'link': link,
'comment': comment
}
yield items
6.运行Scrapy
项目目录文件下运行命令 -o属性为输出文件 类型可以是json cfg
scrapy crawl dangdang -o dangdang6.json
测试成功
{"title": " 【618提前购,秒杀价:26元】初语夏季新品 圆领字母印花宽松ins短袖t恤女开学季学生上衣", "link": "http://product.dangdang.com/1111752669.html", "comment": "249条评论"},
{"title": " 茵曼短袖T恤女2020夏装新款宽松圆领纯棉印花小清新文艺百搭上衣【1802271】", "link": "http://product.dangdang.com/1609730315.html", "comment": "0条评论"},
{"title": " Lee Cooper夏季新品欧美潮牌贱猫印花情侣T恤韩版ins风宽松纯棉短袖T恤女", "link": "http://product.dangdang.com/1607570348.html", "comment": "39条评论"},
{"title": " 新款小雏菊纯棉T恤女2020春款ins潮白色洋气宽松百搭显瘦短袖小菊花上衣", "link": "http://product.dangdang.com/1631397324.html", "comment": "121条评论"},
网友评论