Scrapy爬虫框架实践:使用CSS选择器
什么是Scrapy爬虫框架
Scrapy是一个强大的Python爬虫框架,可以帮助开发者快速高效地编写爬虫程序,并且提供了很多方便的工具和功能。Scrapy框架中包含了多个模块,其中包括引擎(Engine)、调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)以及项目管道(Pipeline)等等。在Scrapy的体系结构中,爬虫(Spider)是最核心的部分,它负责解析网页并提取所需的信息。
CSS选择器介绍
在Scrapy框架中,我们通常使用CSS选择器来定位和提取网页中的数据。CSS选择器是一种用来选择HTML元素的语法,它可以通过标签名、类名、ID、属性等多种方式来定位元素。在Scrapy中,我们可以通过CSS选择器将网页中的数据提取出来,并存储到我们的数据库或者文件中。
使用CSS选择器提取数据
假设我们现在要提取示例网站中的新闻标题和链接,我们可以使用Scrapy框架和CSS选择器来实现。首先我们需要创建一个名为NewsSpider
的爬虫类,在其中定义我们需要爬取的网站和提取规则。
import scrapy
class NewsSpider(scrapy.Spider):
name = 'news'
start_urls = ['http://example.com']
def parse(self, response):
news_titles = response.css('h2.news-title::text').extract()
news_links = response.css('a.news-link::attr(href)').extract()
for title, link in zip(news_titles, news_links):
yield {
'title': title,
'link': link
}
在上面的代码中,我们首先定义了一个名为NewsSpider
的爬虫类,然后指定了需要爬取的网站地址http://example.com
。接着,在parse
方法中使用了CSS选择器response.css
来提取新闻标题和链接,然后将提取的数据以字典的形式返回。最后通过yield
关键字将数据输出。
运行爬虫程序
为了运行我们的爬虫程序,我们需要在命令行中执行以下指令:
scrapy runspider NewsSpider.py -o news.csv
以上指令会执行我们的爬虫程序NewsSpider.py
,并将提取到的数据保存到news.csv
文件中。
实战案例:提取豆瓣电影排行榜数据
现在让我们来看一个实际的案例,我们要使用Scrapy框架和CSS选择器来提取豆瓣电影排行榜中的电影名称和评分。
首先,我们需要创建一个名为DoubanMovieSpider
的爬虫类,并定义我们需要爬取的网站和提取规则。
import scrapy
class DoubanMovieSpider(scrapy.Spider):
name = 'douban_movie'
start_urls = ['https://movie.douban.com/top250']
def parse(self, response):
movies = response.css('div.item')
for movie in movies:
title = movie.css('span.title::text').extract_first()
rating = movie.css('span.rating_num::text').extract_first()
yield {
'title': title,
'rating': rating
}
在上面的代码中,我们定义了一个名为DoubanMovieSpider
的爬虫类,并指定了需要爬取的豆瓣电影排行榜网址https://movie.douban.com/top250
。在parse
方法中使用CSS选择器提取电影名称和评分,然后将数据以字典的形式返回。
为了运行我们的爬虫程序,我们同样需要在命令行中执行以下指令:
scrapy runspider DoubanMovieSpider.py -o douban_movies.csv
以上指令会执行我们的爬虫程序DoubanMovieSpider.py
,并将提取到的数据保存到douban_movies.csv
文件中。
总结
通过本文的介绍,我们了解了Scrapy爬虫框架以及CSS选择器的基本用法。CSS选择器是一个强大的定位元素的工具,在爬虫程序中起着非常重要的作用。通过合理地运用CSS选择器,我们能够快速准确地提取网页中的信息,并实现我们爬虫程序的功能。