通过3个Python爬虫实例,深入了解Scrapy框架 Scrapy是一个用于爬取网站并从中提取结构化数据的Python框架。它可以帮助开发人员快速地构建爬虫,并提供了一系列方便的工具来处理数据。在本文中,我们将通过三个实例来深入了解Scrapy框架的使用和优势。 1. 爬取总统演讲稿 首先,我们来看一个简单的例子,爬取美国总统演讲稿。首先,我们需要定义一个Scrapy项目,并创建一个名为speeches的Spider。在这个Spider中,我们需要定义要爬取的起始URL,以及如何从HTML网页中提取结构化数据。具体代码如下: ``` python import scrapy class SpeechesSpider(scrapy.Spider): name = 'speeches' start_urls = ['https://www.presidency.ucsb.edu/documents/presidential-documents-archive-guidebook/annual-messages-congress-the-state-the-union'] def parse(self, response): for quote in response.css('div.views-row'): yield { 'title': quote.css('.field-docs-titre::text').get(), 'url': quote.css('.field-docs-titre a::attr(href)').get(), 'year': quote.css('.views-field-field-docs-annee::text').get() } next_page = response.css('.pager-next a::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse) ``` 以上代码定义了一个名为speeches的Spider,它会爬取https://www.presidency.ucsb.edu/documents/presidential-documents-archive-guidebook/annual-messages-congress-the-state-the-union这个页面,并从中提取每篇演讲的标题、URL和年份。然后,它会递归地爬取下一页直到最后一页。 2. 爬取天气预报 接下来,我们来看一个更实用的例子,爬取天气预报。首先,我们需要定义一个Scrapy项目,并创建一个名为weather的Spider。在这个Spider中,我们需要定义要爬取的起始URL,以及如何从HTML网页中提取结构化数据。具体代码如下: ``` python import scrapy class WeatherSpider(scrapy.Spider): name = 'weather' start_urls = [ 'https://weather.com/weather/hourbyhour/l/USNY0996:1:US', ] def parse(self, response): for hour in response.css('tr.clickable.closed'): yield { 'time': hour.css('td.time-stamp span::text').get(), 'description': hour.css('td.description span::text').get(), 'temperature': hour.css('td.temperature span::text').get(), 'feelslike': hour.css('td.feels::text').get(), 'precipitation': hour.css('td.precip span::text').get(), 'humidity': hour.css('td.humidity span::text').get(), 'wind': hour.css('td.wind span::text').get(), 'gusts': hour.css('td.gusts span::text').get() } next_page = response.css('.wx-tray-more a::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse) ``` 以上代码定义了一个名为weather的Spider,它会爬取https://weather.com/weather/hourbyhour/l/USNY0996:1:US这个页面,并从中提取每小时的天气情况,包括时间、描述、温度、湿度、风速等。然后,它会递归地爬取下一页直到最后一页。 3. 爬取新闻文章 最后一个例子是爬取新闻文章。首先,我们需要定义一个Scrapy项目,并创建一个名为news的Spider。在这个Spider中,我们需要定义要爬取的起始URL,以及如何从HTML网页中提取结构化数据。具体代码如下: ``` python import scrapy class NewsSpider(scrapy.Spider): name = 'news' start_urls = [ 'https://www.bbc.com/news/world', ] def parse(self, response): for article in response.css('.gs-c-promo-body'): yield { 'title': article.css('.gs-c-promo-heading__title::text').get(), 'description': article.css('.gs-c-promo-summary::text').get(), 'url': article.css('a.gs-c-promo-heading::attr(href)').get(), 'image': article.css('img.gs-o-responsive-image::attr(src)').get(), 'category': response.css('.nw-c-nav__wide-menu__list__link--current::text').get(), 'date': response.css('.nw-c-nav__wide-menu__list__item--time span::text').get() } next_page = response.css('.nw-o-link::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse) ``` 以上代码定义了一个名为news的Spider,它会爬取https://www.bbc.com/news/world这个页面,并从中提取每篇新闻文章的标题、描述、URL、图片、类别和日期。然后,它会递归地爬取下一页直到最后一页。 结语 通过上述三个实例,我们可以深入了解Scrapy框架的使用和优势。Scrapy提供了一系列方便的工具来爬取网站并从中提取结构化数据,使用起来非常方便。如果你需要使用Python进行网站爬取,Scrapy是一个不错的选择。