0x00 基础
scrapy startproject <project_name> [project_dir]
一个爬取前两页名言并保存在html的scrapy1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import scrapy
class QuotesSpider(scrapy.Spider):
name="quotes"
def start_requests(self):
urls=['http://quotes.toscrape.com/page/1/',
'http://quotes.toscrape.com/page/2/',]
for url in urls:
yield scrapy.Request(url=url,callback=self.prase)
def pares(self,response):
page = response.url.split("/")[-2]
filename = 'quotes-%s.html' % page
with open(filename,'wb') as f:
f.write(response.body)
self.log('Saved file %s' % filename)
运行这个scrapy
scrapy crwal quotes
。name
必须的,每个spider的name不能重复。start_request()
返回请求,spider会从中抓取内容,后续请求也从这些请求中生成parse()
将被调用来处理为每个请求下载的响应的方法。响应参数是TextResponse保存页面内容的一个实例。page = response.url.split("/")
这里以/
分割,返回的是一个列表。这里的[-2]会对返回的列表进行索引,选取倒数第二项。
不用start_requests()
1 | import scrapy |
0x01提取数据的练习
scrapy shell http://quotes.toscrape.com/page/1/
response.css(‘title’).extract()
[‘Quotes to Scrape ‘]
response.css(‘title::text’).extract_first()
‘Quotes to Scrape’
response.css(‘title::text’)[0].extract()
‘Quotes to Scrape’
response.css(‘title::text’).re(r’Quotes.*‘)
[‘Quotes to Scrape’]
0x03保存数据
scrapy crawl quotes -o quotes.jl
这将生成一个quotes.json包含所有抓取的项目的文件,并以JSON序列化.
0x04实现翻页
1 | import scrapy |
这里说一下urljoin()函数,有个比较好理解的 https://www.cnblogs.com/phil-chow/p/5347947.html
这里可以将next_page = response.urljoin(next_page)
yield scrapy.Request(next_page, callback=self.parse)
换成 yield response.fllow(next_parse,callback=self.parse)