Scrapy简介
Scrapy是Python实现的爬虫框架,使用只需要关注核心业务即可.安装教程请参考官方文档
安装完成之后可通过scrapy 命令创建项目,爬虫,及运行爬虫,详情使用 scrapy -h 命令查看
创建项目及爬虫后重写爬虫中parse方法即可实现简单内容爬取,支持xpath及css模式提取内容
项目结构说明
图片中meijm_practice为创建的项目名称.
- spiders文件夹:存放具体爬虫类继承自scrapy.Spider及其子类,作用是爬取网页并生产具体实体
- items.py:存放爬虫中使用到的实体
- middlewares.py: 中间件,例如ip代理等
- pipelines.py:直译是管道,对爬虫产生的实体进行后续处理,例如存储至数据库,下载等
- settings.py:项目全局配置,设置启用的中间件,管道,请求头等.
scrapy.Spider类简介
核心属性及方法说明
名称 | 类型 | 说明 |
---|---|---|
name | 字符串属性 | 爬虫名称,执行爬虫时使用 |
custom_settings | 字典属性 | 自定义设置,指定中间件管道,请求头等 |
allowed_domains | 数组属性 | 允许的域名,创建爬虫时指定,非必须 |
start_urls | 数组属性 | 爬虫开始的地址 |
start_requests(slf) | 重载方法 | 爬虫开始地址的方法模式,返回为<br /> yield scrapy.Request(url=地址, callback=self.parse) |
parse(self, response) | 重载方法 | 解析网页,并生产具体实体或启动下次爬取 |
例子
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').get(),
'author': quote.css('small.author::text').get(),
'tags': quote.css('div.tags a.tag::text').getall(),
}
命令行执行爬虫
scrapy crawl quotes -O quotes.json
直接执行会将爬取到的内容输出至qutoes.json文件中不加"-O quotes.json"则仅输出至控制台
其它
parse中返回下次爬取网址的几种方法
- response.follow_all(response.xpath("a标签"), self.解析函数)
- yield scrapy.Request(url地址绝对路径, callback=self.解析函数)
- yield response.follow(url相对路径/选择器返回的单个a标签, callback=self.解析函数)
- yield from response.follow_all(选择器返回的所有a标签, callback=self.解析函数)
self为当前类,解析函数参数与parse相同
scrapy.Spider还有几个官方子类,常用的是CrawlSpider:支持正则过滤url
参考资料
官方网站 https://scrapy.org/