运行爬虫脚本
例子: 脚本名:quotes_spider.py
import scrapy
class QuotesSpider(scrapy.Spider):
name = 'quotes'
start_urls = [
'http://quotes.toscrape.com/page/1/',
'http://quotes.toscrape.com/page/2/',
]
def parse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').extract_first(),
'author': quote.css('small.author::text').extract_first(),
'tags': quote.css('div.tags a.tag::text').extract()
}
终端运行:
scrapy crawl quotes
//quotes是继承自scrapy类的QuotesSpider的属性名name
//每个爬虫的name是唯一的
存储爬虫的内容:
scrapy crawl quotes -o quotes.json //若连续运行2次且没有删除第一次生成的文件,会生成一个被损坏的json文件
使用json line格式:
scrapy crawl quotes -o quotes.jl //连续运行2次,会叠加第二次的内容到文件,不会出现json文件那样的损坏
scrapy shell: 尝试使用Scrapy shell选择器是学习抓取数据的好方式
scrapy shell "http://quotes.toscrape.com/page/1"
\>>> response.css('title')
[<Selector xpath='descendant-or-self::title' data='<title>Quotes to Scrape</title>'>]
\>>> response.css('title::text').extract() //得到一个list
['Quotes to Scrape']
\>>> response.css('title').extract()
['<title>Quotes to Scrape</title>']
\>>> response.css('title::text').extract_frist() //只要list中的第一个元素
'Quotes to Scrape'
\>>> response.css('title::text')[0].extract() //同上,另一种写法
'Quotes to Scrape'
持续更新中...