Python爬虫-scrapy快速入门实例

本文详细介绍如何使用Scrapy框架从指定网站抓取数据,包括安装配置、项目创建、编写爬虫模块、数据处理及输出等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.安装scrapy

# 首先更新pip组件
pip install --upgrade pip

# 安装scrapy包
pip install scrapy

2.创建scrapy项目

创建项目

scrapy startproject [项目名]

此命令会根据scrapy的模板创建一个爬虫项目

创建爬虫模块

scrapy genspider [模块名] [目标网站]

执行次命令需要先进入刚刚创建的爬虫项目中

3.编写并配置爬虫

目标网站内容分析

爬取 http://quotes.toscrape.com/ 网站的quote内容

1.分析HTML标签结构
标签结构分析

分析的目的是找到如何才能唯一的找到目标内容的XPath

2.使用chrome插件-XPath Helper进行分析
在这里插入图片描述

安装插件后需要重新启动浏览器才能生效!

爬虫模块

在执行 scrapy genspider [模块名] [目标网站] 命令后生成的爬虫模块文件中编写相关的内容

生成爬虫模块示例

scrapy genspider quote quotes.toscrape.com

编写quote.py模块

class QuoteSpider(scrapy.Spider):
    # 爬虫名称
    name = 'quote'
    # 允许访问的域,除了该域的其他域将会被自动忽略
    allowed_domains = ['quotes.toscrape.com']
    # 目标url列表
    start_urls = ['http://quotes.toscrape.com/']
    def parse(self, response):
        # 使用xpath指定要爬取的dom节点内容
        node_list = response.xpath("//div[@class='quote']")
        # 遍历dom节点内容来取出目标数据
        for node in node_list:
            # 首先建立相应Item对象,在items中配置
            quote_item = QuoteItem()
            # 在node节点中进一步获取属性内容
            content = node.xpath("/span[@class='text']/text()").extract()
            auth = node.xpath("/span/small/text()").extract()
            # 向对象中添加属性
            quote_item['content'] = content[0]
            quote_item['auth'] = auth[0]
            yield quote_item
items.py

items文件对应要获取数据的实体类,类似于java中的数据库映射对象
可以通过scrapy.Field()方法实现属性的自动映射,前提是对应的爬虫返回的属性字段要相同

示例

class Quote(scrapy.Item):
    content = scrapy.Field()
    auth = scrapy.Field()
pipelines模块配置

通过爬虫模块获取的数据会自动发送到pipelines中相应的Pipeline中

自定义一个Pipeline

# 由于要写入json数据,先导入json模块
import json
class QuotePipeline(object):
    # 初始化方法
    def __init__(self):
        self.f = open("quote_pipline.json", "w") # 初始化创建一个json文件
    
    # 处理Item的方法
    def process_item(self, item, spider):
        # item的字典数据转换成json数据并写入文件中
        content = json.dumps(dict(item), ensure_ascii= False) + ", \n"
        self.f.write(content)
        return item
        
    # 处理完成后的方法
    def close_spider(self, spider):
        self.f.close

在settings.py配置文件中注册自定义的Pipeline

ITEM_PIPELINES = {
   'Test.pipelines.QuotePipeline': 300,
}

Test是当前的项目名
300表示优先级,可以定义多个pipeline根据优先级进行顺序处理(类似责任链),数值越小的进行优先处理

4.启动爬虫

启动爬虫需要进入到项目目录下,执行命令

查看当前的爬虫模块

此命令会列出当前可执行的爬虫

scrapy list

执行启动命令

crawl后面是爬虫的名称,-o表示输出的文件名

scrapy crawl quote -o quote.json

查看当前目录下的quote.json文件
在这里插入图片描述
获取成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值