介绍
scrapy主要具有两大功能,爬取网站和提取结构化信息。如果说普通的爬虫库是爬虫的利器,那它就是神器,因为它可能方便的爬取整个网站的数据。
import scrapy
class QuotesSpider(scrapy.Spider):
name = 'quotes'
start_urls = ['http://quotes.toscrape.com/tag/humor/', ]
def parse(self, response):
for quote in response.xpath('//div[@class="quote"]'):
#print quote.xpath('span[@class="text"]/text()').extract_first()
#print quote.xpath('small//text()').extract_first()
yield {
'title' : quote.xpath('span[@class="text"]/text()').extract_first(),
'author': quote.xpath('small//text()').extract_first()
}
next_page_url = response.xpath('//li[@class="next"]/a/@href').extract_first()
if next_page_url is not None:
next_page_url = response.urljoin(next_page_url)
yield response.follow(next_page_url, callback = self.parse) ###最后的yield不能忘记
简单爬虫,通过scrapy runspider quotes_spider.py -o 1.csv即可。
完整工程,需要startproject douban_crawl
在item.py中定义数据容器中的数据域。
item.py
import scrapy
class DoubanSpiderItem(scrapy.Item):
# define the fields for your item here like:
name = scrapy.Field()
price = scrapy.Field()
edition_year = scrapy.Field()
publisher = scrapy.Field()
ratings = scrapy.Field()
在项目中的spiders的子文件夹新建一个spider文件,如douban_spider.py。
scrapy会对抓取过的页面建立一个hash表,也就是不会抓取重复的URL。