零基础写python爬虫之使用Scrapy框架编写爬虫

  • Post category:Python

以下是“零基础写python爬虫之使用Scrapy框架编写爬虫”的完整攻略:

一、前置知识

在学习使用Scrapy框架编写爬虫之前,需要具备一定的Python基础知识,同时也需要了解HTML、CSS和XPath等相关知识。

二、安装Scrapy

使用pip命令可方便地安装Scrapy框架,在命令行中输入以下命令:

pip install scrapy

三、创建Scrapy项目

在命令行中输入以下命令,即可创建一个Scrapy项目:

scrapy startproject projectname

其中,projectname为你的项目名称。

四、创建Spider

在Scrapy框架中,Spider是爬虫的核心部分。使用以下命令,可以创建一个Spider:

scrapy genspider spidername domain

其中,spidername为你的Spider名称,domain为所要爬取的网站域名。

五、编写Spider

在创建好Spider之后,就可以开始编写代码了。以下是一个简单的示例:

import scrapy

class ExampleSpider(scrapy.Spider):
    name = "example"
    allowed_domains = ["example.com"]
    start_urls = [
        "http://www.example.com/",
    ]

    def parse(self, response):
        # 处理爬取到的数据
        pass

在这个示例中,我们创建了一个名为ExampleSpider的Spider,并指定了所要爬取的域名为example.com。同时,我们也指定了爬虫的起始URL为http://www.example.com/。在parse方法中,我们可以编写处理爬取到的数据的代码。

六、编写Item Pipeline

通过编写Item Pipeline,我们可以方便地对爬取到的数据进行处理和保存。以下是一个示例:

class ExamplePipeline(object):
    def process_item(self, item, spider):
        # 处理Item
        return item

在这个示例中,我们创建了一个名为ExamplePipeline的Item Pipeline,并定义了process_item方法。在这个方法中,我们可以编写对Item进行处理的代码。

七、运行Spider

在编写好Spider和Item Pipeline之后,我们就可以运行Spider,并获取所需数据了。在命令行中输入以下命令,即可运行Spider:

scrapy crawl spidername

其中,spidername为你的Spider名称。

八、示例说明

这里提供两个示例,分别为爬取豆瓣电影Top250和爬取天气预报数据。

1. 爬取豆瓣电影Top250

爬取豆瓣电影Top250信息,包括电影名、导演、演员、评分等。

首先,需要在Spider中指定所要爬取的URL。在该示例中,我们指定了所有页面的URL格式为http://movie.douban.com/top250?start={},其中花括号内的数字为该页面的起始数字。然后,在parse方法中,我们可以使用XPath或CSS Selector对页面进行解析,获取所需信息。

代码示例:

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule

class DoubanTop250Spider(CrawlSpider):
    name = 'douban_top250'
    allowed_domains = ['movie.douban.com']
    start_urls = ['http://movie.douban.com/top250']

    rules = (
        Rule(LinkExtractor(allow=r'start=\d+'), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        movies = response.css('.item')
        for movie in movies:
            yield {
                'title': movie.css('.title::text').get(),
                'director': movie.css('.info .bd p::text')[0].get().strip().split()[0],
                'actors': [a.strip() for a in movie.css('.info .bd p::text')[0].get().strip().split()[1:]],
                'star': movie.css('.rating_num::text').get(),
            }

2. 爬取天气预报数据

爬取某个城市的天气预报数据,包括日期、天气状况、最高温度和最低温度。

首先,需要在Spider中指定所要爬取的URL。在该示例中,我们指定了爬取杭州市七天内的天气预报数据。然后,在parse方法中,我们使用XPath对页面进行解析,获取所需信息。

代码示例:

import scrapy

class WeatherSpider(scrapy.Spider):
    name = 'weather'
    allowed_domains = ['tianqi.com']
    start_urls = ['http://lishi.tianqi.com/hangzhou/202108.html']

    def parse(self, response):
        trs = response.xpath('//div[@class="tqtongji2"]/table/tr')[1:]
        for tr in trs:
            yield {
                'date': tr.xpath('.//td[1]/a/text()').get(),
                'weather': tr.xpath('.//td[2]/text()').get(),
                'high_temperature': tr.xpath('.//td[3]/text()').get(),
                'low_temperature': tr.xpath('.//td[4]/text()').get(),
            }

至此,“零基础写python爬虫之使用Scrapy框架编写爬虫”的攻略已经介绍完毕。