Python是一种广泛使用的高级语言,Scrapy是一个基于Python的网络爬虫框架,可以用于从网站上爬取数据。这个攻略将介绍Scrapy框架的CrawlSpider模块,提供一个通用的爬虫实现,可以根据用户的需求,定制特定的数据爬虫。
设置Scrapy环境
首先,我们需要设置Scrapy环境,并确保安装了Scrapy插件。在命令行中使用以下命令安装Scrapy:
pip install scrapy
创建CrawlSpider项目
使用以下命令创建一个Scrapy项目,并使用CrawlSpider模块:
scrapy startproject crawlspider_demo
cd crawlspider_demo
scrapy genspider -t crawl mycrawlspider example.com
这些命令将创建一个名为crawlspider_demo
的Scrapy项目,并在该项目中创建一个名为mycrawlspider
的爬虫程序。example.com
是要爬取数据的网站。
编写Spider规则
现在,我们需要在mycrawlspider.py
文件中添加Spider规则。这个示例中,我们将爬取example.com
站点的文章信息。
from scrapy.spiders import Rule, CrawlSpider
from scrapy.linkextractors import LinkExtractor
class MyCrawlSpider(CrawlSpider):
name = 'mycrawlspider'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com/']
rules = (
Rule(LinkExtractor(allow=('[a-z]+', )), callback='parse_item', follow=True),
)
def parse_item(self, response):
self.logger.info('Parse function called on %s', response.url)
for i in response.xpath('//div[@class="summary"]/h2'):
yield {'title': i.xpath('a/text()').extract_first()}
上面代码解释如下:
- 继承自CrawlSpider,实现自定义的爬虫。
- 设置爬虫name和allowed_domains。
- 起始URL为
'http://www.example.com/'
。 - Rule中定义URL Extractor,并指定爬取规则。allow选项用于限制URL,添加
'[a-z]+'
就是提取网站名为全小写字母的URL。callback选择parse_item函数。follow=True时,Spider会自动递归爬取链接。 - parse_item函数处理单个网页,并从中提取数据。
运行CrawlSpider
现在,我们可以使用以下命令运行CrawlSpider:
scrapy crawl mycrawlspider
如果执行成功,爬虫将从http://www.example.com/
开始爬取,提取网页中的文章标题。
第二个示例
我们可以使用CrawlSpider在多个页面上爬取数据,前提是能够正确配置Spider规则。以下是一个更复杂的示例,演示如何爬取博客站点的所有文章信息:
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class MyCrawlSpider(CrawlSpider):
name = 'mycrawlspider'
allowed_domains = ['blog.example.com']
start_urls = ['http://blog.example.com/']
rules = (
Rule(LinkExtractor(allow=r'/articles/'), follow=True),
Rule(LinkExtractor(allow=r'/articles/.+'), callback='parse_item'),
)
def parse_item(self, response):
for i in response.xpath('//*[@id="blog-post"]/div[2]'):
yield {
'title': i.xpath('header/h1/text()').extract_first(),
'author': i.xpath('header/p/span/a/text()').extract_first(),
'content': i.xpath('div/div/p/text()').extract_first(),
}
上面代码解释如下:
- 继承自CrawlSpider,实现自定义的爬虫。
- 设置爬虫name和allowed_domains。
- 起始URL为
'http://blog.example.com/'
。 - 第一个Rule将提取所有适合
/articles/
格式的URL,并将Spider向该方向逐个尝试爬取。由于follow=True,同一方向上所有URL都会被递归爬取。 - 第二个Rule将提取所有适合
/articles/.+
格式的URL,并使用parse_item处理该页面信息。 - parse_item函数从单个网页中提取数据。xpath用于查询页面DOM元素,正则表达式用于从固定的格式中提取数据。
总结
以上两个示例演示CrawlSpider的通用爬虫实现。规则应该根据需要正确配置,以爬取网站的所有信息。CrawlSpider是Scrapy框架中非常重要的一个模块,可以帮助我们轻松地爬取大量数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例 - Python技术站