scrapy获取当当网多页的获取
2021/11/15 23:39:59
本文主要是介绍scrapy获取当当网多页的获取,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
结合上节,网多页的获取只需要修改
dang.py
import scrapy from scrapy_dangdang.items import ScrapyDangdang095Item class DangSpider(scrapy.Spider): name = 'dang' # 如果是多页下载的话 那么必须要调整的是allowed_domains的范围 一般情况下只写域名 allowed_domains = ['category.dangdang.com'] start_urls = ['http://category.dangdang.com/cp01.01.02.00.00.00.html'] base_url = 'http://category.dangdang.com/pg' page = 1 def parse(self, response): # pipelines 下载数据 # items 定义数据结构的 # src = //ul[@id="component_59"]/li//img/@src # alt = //ul[@id="component_59"]/li//img/@alt # price = //ul[@id="component_59"]/li//p[@class="price"]/span[1]/text() # 所有的seletor的对象 都可以再次调用xpath方法 li_list = response.xpath('//ul[@id="component_59"]/li') for li in li_list: src = li.xpath('.//img/@data-original').extract_first() # 第一张图片和其他的图片的标签的属性是不一样的 # 第一张图片的src是可以使用的 其他的图片的地址是data-original if src: src = src else: src = li.xpath('.//img/@src').extract_first() name = li.xpath('.//img/@alt').extract_first() price = li.xpath('.//p[@class="price"]/span[1]/text()').extract_first() book = ScrapyDangdang095Item(src=src,name=name,price=price) # 获取一个book就将book交给pipelines yield book # 每一页的爬取的业务逻辑全都是一样的,所以我们只需要将执行的那个页的请求再次调用parse方法就可以了 # http://category.dangdang.com/pg2-cp01.01.02.00.00.00.html # http://category.dangdang.com/pg3-cp01.01.02.00.00.00.html # http://category.dangdang.com/pg4-cp01.01.02.00.00.00.html if self.page < 100: self.page = self.page + 1 url = self.base_url + str(self.page) + '-cp01.01.02.00.00.00.html' # 怎么去调用parse方法 # scrapy.Request就是scrpay的get请求 # url就是请求地址 # callback是你要执行的那个函数 注意不需要加() yield scrapy.Request(url=url,callback=self.parse)
运行
Ctrl+z暂定
多页下载完毕
这篇关于scrapy获取当当网多页的获取的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享