初识scrapy
Scrapy是一个用于爬取web站点并提取结构化数据的应用框架,通常我们称之为爬虫,一款优秀的python爬虫。

import scrapy
class QuotesSpider(scrapy.Spider): name = 'quotes' start_urls = [ 'http://quotes.toscrape.com/tag/humor/', ]
def parse(self, response): for quote in response.css('div.quote'): yield { 'author': quote.xpath('span/small/text()').get(), 'text': quote.css('span.text::text').get(), }
next_page = response.css('li.next a::attr("href")').get() if next_page is not None: yield response.follow(next_page, self.parse)scrapy runspider quotes_spider.py -o quotes.jsonpython -m scrapy runspider quotes_spider.py -o quotes.json[{ "author": "Jane Austen", "text": "\u201cThe person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.\u201d"},{ "author": "Groucho Marx", "text": "\u201cOutside of a dog, a book is man's best friend. Inside of a dog it's too dark to read.\u201d"},{ "author": "Steve Martin", "text": "\u201cA day without sunshine is like, you know, night.\u201d"},...]我们现在来分析一下上边这段代码的执行过程。
当运行scrapy runspider quotes_spider.py这个命令后,scrapy会从quotes_spider.py这个脚本加载其中定义的一个spider,并在爬虫引擎中执行这个spider定义的一些方法。
爬虫引擎首先打开start_urls中定义的链接(http://quotes.toscrape.com/tag/humor/),成功后会调用默认的回调函数parse,将响应消息response作为参数传入parse函数。
parse回调函数使用css选择器选取并循环遍历response中的quote对象,从中提取中author和text字段。并查找页面中的next标签,以确定是否继续使用同样的方法爬取和解析“下一页”。
内置增强的css选择器和xpath表达式,用来选取和解析html和xml文件,支持使用正则表达式。 提供一个交互式shell控制台,方便编写和调试spider。 内置多种数据输出格式(json、csv、xml),并可将数据存储在多种后端系统(ftp、s3、本地文件系统)。 支持页面编码自动检测 丰富的插件,可用于处理cookies/session,支持http压缩、鉴权和缓存等特性,仿造user-agent等。
赞 (0)
