初识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.json
python -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)