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/"]}]