Scrapy爬虫框架学习(三)分页爬取并保存为json文件

Scrapy爬虫框架学习(三)分页爬取并保存为json文件

继续用爬虫框架学习框架一中已有的项目,在spiders文件夹中新建dmoz_spider.py文件 下面代码为新建文件的内容

import scrapy
from tutorial.items import DmozItem

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    start_urls = [
        'http://quotes.toscrape.com/'
        ]

    def parse(self, response):
        for href in response.css('div[class="col-md-4 tags-box"]>span>a::attr("href")'):
            #循环爬取每个href组成新的url
            url =response.urljoin( href.extract())   #官网urljoin的语法错误,传一个参数就行了
            yield scrapy.Request(url,callback=self.parse_dir_contents)
            #yield在此处作用:为每一个新的url发起request请求,并通过回调函数parse_dir_contents来处理请求的响应


    def parse_dir_contents(self,response):
        #处理每一个request后的请求
        for sel in response.xpath('//div[@class="quote"]/div[@class="tags"]/a[@class="tag"]'):
            item = DmozItem()
            item['title'] = sel.xpath('text()').extract()
            item['link'] = sel.xpath('@href').extract()
            yield item
            #此处yield的作用是:返回DmozItem的一个对象,scrap有框架获得这个对象之后,会将这个对象传递给 pipelines.py来做进一步处理。


在项目所在文件夹中打开cmd命令

输入:

scrapy crawl dmoz -o items.json
#会在项目中生成items.json 存放爬取内容
#爬取的内容过多,只展示部分爬取内容
[{"title": ["life"], "link": ["/tag/life/page/1/"]},
{"title": ["love"], "link": ["/tag/love/page/1/"]},
{"title": ["friends"], "link": ["/tag/friends/page/1/"]},
{"title": ["heartbreak"], "link": ["/tag/heartbreak/page/1/"]},
{"title": ["inspirational"], "link": ["/tag/inspirational/page/1/"]},
{"title": ["life"], "link": ["/tag/life/page/1/"]},
{"title": ["love"], "link": ["/tag/love/page/1/"]}]
发布了11 篇原创文章 · 获赞 2 · 访问量 1513

猜你喜欢

转载自blog.csdn.net/mostermoonsky/article/details/104098333