匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

通过3个Python爬虫实例,深入了解Scrapy框架

通过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是一个不错的选择。