Python 爬虫,scrapy,scrapy入门

本文介绍了Python Scrapy框架的基本使用,包括如何安装Scrapy,创建Scrapy项目,生成爬虫,提取数据,以及如何保存数据。通过scrapy startproject命令创建项目,genspider生成爬虫,并在spiders文件夹中的爬虫脚本中应用xpath等方法抓取数据,再通过pipelines.py处理和保存数据。理解这些步骤是开始Scrapy爬虫之旅的关键。

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

安装scrapy框架: pip3 install scrapy

爬虫流程:


 创建scrapy爬虫项目的步骤:

1. 创建一个scrapy项目: scrapy startproject 项目名   # 在Python命令行终端中执行

2. 生成一个爬虫:先cd到项目目录中 ----> scrapy genspider 爬虫名 baidu.com    # (url域名可以限制爬虫爬取的范围)

3. 提取数据: 完善spiders/爬虫名.py,使用xpath等方法

4. 保存数据:  pipelines.py中保存数据

5. 启动爬虫项目: cd到项目目录中 ----> scrapy crawl 爬虫名  # 在Python命令行终端中执行


项目名/spiders/爬虫名.py(爬虫,xpath等提取数据):

# -*- coding: utf-8 -*-
import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'  # 爬虫名
    allowed_domains = ['baidu.com']  # 允许爬取的范围
    start_urls = ['http://www.baidu.com/']  # 最开始请求的url地址
    
    # 函数名固定
    def parse(self, response):
        # 处理start_url地址对应的响应
        # ret1 = response.xpath("//div[@class='tea_con']//h30/text()")  # 返回 类似列表类型 [<Selector xpath="..." data="文本1">]
        # ret1 = response.xpath("//div[@class='tea_con']//h30/text()").extract()  # extract提取出数据。 ["文本1","文本2"]
        # print(ret1)  # ["文本1","文本2"]

        # 分组
        li_list = response.xpath("//div[@class='tea_con']//li")
        for li in li_list:
            item = {}
            item["name"] = li.xpath(".//h3/text()").extract_first()  # extract()[0] 没有数据会报错。extract_first()没有数据返回None。
            item["title"] = li.xpath(".//h4/text()").extract_first()
            # print(item)
            # yield后面返回的必须是 Request, BaseItem, dict or None 类型。 不能返回类似列表的类型。
            yield item   # 会将item数据传递给 pipelines.py处理。 也可以返回Request对象,表示发送下一个url请求。
            # yield会将函数变成生成器,避免占用大量内存。

项目名/pipelines.py(管道,保存数据):

# -*- coding: utf-8 -*-

# 需要在setting.py文件中配置ITEM_PIPELINES项

class MyspiderPipeline(object):
    # 函数名固定
    def process_item(self, item, spider):
        print(item)  # item是爬虫提取出来的数据。 (或者是上一个pipelines类return返回的数据)
        return item  # 如果没有return,后面的pipelines类就不会收到item数据


class MyspiderPipeline1(object):
    def process_item(self, item, spider):
        print(item)
        return item
    

项目名/settings.py(配置文件,配置pipelines管道):

# 。。。

LOG_LEVEL = "WARNING"  # 设置日志等级。 默认debug级别
LOG_FILE = "./log.log"   # 设置日志保存位置

USER_AGENT = 'xxx'   # 设置请求头,模拟浏览器

# 服从 robots.txt 协议
ROBOTSTXT_OBEY = True

# 开启pipelines。  配置pipelines
ITEM_PIPELINES = {
    'myspider.pipelines.MyspiderPipeline': 300,   # 配置pipelines中的类 距离scrapy引擎的距离(权重)。 
    'myspider.pipelines.MyspiderPipeline1': 301,   # 数据会先经过300的pipelines类,再经过301的类。
}

# 。。。

项目目录结构:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值