美文网首页
Python Scrapy使用、dangdang实战

Python Scrapy使用、dangdang实战

作者: 慕璃 | 来源:发表于2020-06-11 11:37 被阅读0次

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条评论"},

7.连接数据库

暂定

相关文章

网友评论

      本文标题:Python Scrapy使用、dangdang实战

      本文链接:https://www.haomeiwen.com/subject/ghxbtktx.html