📜  讨论Scrapy(1)

📅  最后修改于: 2023-12-03 14:57:37.147000             🧑  作者: Mango

Scrapy

Scrapy是一个用于爬取数据的Python框架。它提供了一种基于事件驱动的机制来处理网页和解析数据的方法。使用Scrapy可以有效地从大量网站上采集数据,并使用Python进行数据处理、清洗和整理。

特点
  • Scrapy的设计简单明了,易于使用。
  • 支持并发处理,速度快。
  • 支持多种数据格式,包括JSON和CSV。
  • 支持自定义的数据处理和解析方法。
  • 通过中间件可以进行网站爬取的限制和策略设置。
  • 支持分布式爬取和部署。
安装

可以通过pip安装Scrapy:

pip install scrapy
示例代码

下面是一个Scrapy爬取百度首页搜索结果的示例代码:

import scrapy

class BaiduSpider(scrapy.Spider):
    name = "baidu"
    allowed_domains = ["www.baidu.com"]
    start_urls = ["https://www.baidu.com/s?wd=scrapy"]

    def parse(self, response):
        for sel in response.xpath('//div[@id="content_left"]/div[@class="result c-container "]'):
            title = sel.xpath('h3/a//text()').extract()
            link_url = sel.xpath('h3/a/@href').extract()
            desc = sel.xpath('div[@class="c-abstract"]/text()').extract()
            item = {
                'title': title,
                'link_url': link_url,
                'desc': desc,
            }
            yield item
中间件

在Scrapy中,中间件是指处理和过滤爬取请求和响应的组件。可以使用中间件实现一些功能,例如自定义User-Agent、设置代理、限制爬取速度等。

下面是一个自定义User-Agent的中间件代码示例:

import random

class RandomUserAgentMiddleware(object):
    def __init__(self, agents):
        self.agents = agents

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.settings.getlist('USER_AGENTS'))

    def process_request(self, request, spider):
        request.headers.setdefault('User-Agent', random.choice(self.agents))

最后,Scrapy是一款功能强大的爬虫框架,使用它能够快速、高效地采集数据。但是,采集数据也需要遵守相关的法律规定,同时也需要注意对网站的规则进行尊重。