python爬虫之Scrapy框架--日志信息--数据提取

news2024/11/23 22:07:38

目录

Scrapy日志信息

了解日志信息

关于日志信息的重要性

利用日志信息进行调试和优化

Scrapy数据的提取

选择器(Selector)的基本使用

Item的定义与使用 

数据处理与管道(Pipeline) 


Scrapy日志信息

在开发和调试过程中,了解和利用Scrapy框架中的控制台日志信息,可以帮助我们更好地理解程序运行状态,优化爬取过程,提高爬虫的效率和稳定性。

了解日志信息

参考日志:

2030-07-13 16:45:19 [scrapy.utils.log] INFO: Scrapy 2.6.1 started (bot: scrapy02)
2030-07-13 16:45:19 [scrapy.utils.log] INFO: Versions: lxml 4.8.0.0, libxml2 2.9.12, cssselect 1.1.0, parsel 1.6.0, w3lib 1.22.0, Twisted 22.4.0, Python 3.10.2 (tags/v3.10.2:a58ebcc, Jan 17 2022, 14:12:15) [MSC v.1929 64 bit (AMD64)], pyOpenSSL 22.0.0 (OpenSSL 3.0.4 21 Jun 2022), cryptography 37.0.3, Platform Windows-10-10.0.22000-SP0
2030-07-13 16:45:19 [scrapy.crawler] INFO: Overridden settings:
{'BOT_NAME': 'scrapy02',
 'NEWSPIDER_MODULE': 'scrapy02.spiders',
 'SPIDER_MODULES': ['scrapy02.spiders']}
2030-07-13 16:45:19 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.selectreactor.SelectReactor
2030-07-13 16:45:19 [scrapy.extensions.telnet] INFO: Telnet Password: a7b76850d59e14d0
2030-07-13 16:45:20 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.corestats.CoreStats',
 'scrapy.extensions.telnet.TelnetConsole',
 'scrapy.extensions.logstats.LogStats']
2030-07-13 16:45:20 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
 'scrapy.downloadermiddlewares.retry.RetryMiddleware',
 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
 'scrapy.downloadermiddlewares.stats.DownloaderStats']
2030-07-13 16:45:20 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
 'scrapy.spidermiddlewares.referer.RefererMiddleware',
 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
 'scrapy.spidermiddlewares.depth.DepthMiddleware']
2030-07-13 16:45:20 [scrapy.middleware] INFO: Enabled item pipelines:
[]
2030-07-13 16:45:20 [scrapy.core.engine] INFO: Spider opened
2030-07-13 16:45:20 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2030-07-13 16:45:20 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2030-07-13 16:45:24 [filelock] DEBUG: Attempting to acquire lock 1733280163264 on D:\python_env\spider2_env\lib\site-packages\tldextract\.suffix_cache/publicsuffix.org-tlds\de84b5ca2167d4c83e38fb162f2e8738.tldextract.json.lock
2030-07-13 16:45:24 [filelock] DEBUG: Lock 1733280163264 acquired on D:\python_env\spider2_env\lib\site-packages\tldextract\.suffix_cache/publicsuffix.org-tlds\de84b5ca2167d4c83e38fb162f2e8738.tldextract.json.lock
2030-07-13 16:45:24 [filelock] DEBUG: Attempting to release lock 1733280163264 on D:\python_env\spider2_env\lib\site-packages\tldextract\.suffix_cache/publicsuffix.org-tlds\de84b5ca2167d4c83e38fb162f2e8738.tldextract.json.lock
2030-07-13 16:45:24 [filelock] DEBUG: Lock 1733280163264 released on D:\python_env\spider2_env\lib\site-packages\tldextract\.suffix_cache/publicsuffix.org-tlds\de84b5ca2167d4c83e38fb162f2e8738.tldextract.json.lock
2030-07-13 16:45:24 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.baidu.com/> (referer: None) 
1111111111111111111111111111111111111111111111
2030-07-13 16:45:24 [scrapy.core.engine] INFO: Closing spider (finished)
2030-07-13 16:45:24 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 213,
 'downloader/request_count': 1,
 'downloader/request_method_count/GET': 1,
 'downloader/response_bytes': 1476,
 'downloader/response_count': 1,
 'downloader/response_status_count/200': 1,
 'elapsed_time_seconds': 4.716963,
 'finish_reason': 'finished',
 'finish_time': datetime.datetime(2030, 7, 13, 8, 45, 24, 923094),
 'httpcompression/response_bytes': 2381,
 'httpcompression/response_count': 1,
 'log_count/DEBUG': 6,
 'log_count/INFO': 10,
 'response_received_count': 1,
 'scheduler/dequeued': 1,
 'scheduler/dequeued/memory': 1,
 'scheduler/enqueued': 1,
 'scheduler/enqueued/memory': 1,
 'start_time': datetime.datetime(2030, 7, 13, 8, 45, 20, 206131)}
2030-07-13 16:45:24 [scrapy.core.engine] INFO: Spider closed (finished)

我们可以看到大体的日志信息如下: 

  • 启动爬虫

  • 使用的模块与版本

  • 加载配置文件

  • 打开下载中间件

  • 打开中间件

  • 打开管道

  • 爬虫开启

  • 打印统计

 详细的信息介绍:

  1. 日志级别控制:Scrapy框架通过设置日志级别来控制控制台输出的详细程度。默认情况下,日志级别设置为DEBUG,输出最详细的信息。我们可以根据需要将日志级别调整为其他级别,如INFO、WARNING、ERROR等,以减少冗余信息。

  2. 请求与响应信息:在控制台日志中,Scrapy会显示每个请求的URL、HTTP方法、请求头信息等内容,方便我们追踪和调试网络请求。同时,对于每个请求的响应,日志中会显示响应的状态码、大小以及响应时间等信息,帮助我们评估爬虫的性能和网络状况。

  3. 解析过程日志:当Scrapy框架解析网页并提取数据时,会在控制台中显示解析过程的详细日志信息,包括解析的XPath或CSS选择器表达式、提取的字段内容以及数据处理的结果。通过观察这些日志信息,我们可以及时发现解析错误和异常,优化数据提取的方法,确保数据的准确性和完整性。

  4. 中间件日志:Scrapy框架中的中间件用于处理请求和响应,在控制台日志中,我们可以查看中间件的调用顺序和结果,从而了解中间件在爬虫过程中的作用和效果。中间件日志信息可以帮助我们定位中间件的问题,如处理请求时出现的错误或异常。

关于日志信息的重要性

  1. 爬虫状态跟踪:通过控制台日志信息,我们可以实时监控爬虫的状态,包括请求的发送和响应的接收情况,从而了解爬虫的运行情况。当爬虫出现异常或错误时,控制台日志信息可以帮助我们快速定位问题所在,加快故障排查的速度。

  2. 数据提取与处理:控制台日志信息中会显示爬虫解析网页的过程,包括提取的字段、抓取的链接以及数据处理的结果。通过查看这些信息,我们可以验证数据提取的准确性,及时发现和解决解析过程中的问题,并根据日志信息对数据进行预处理和清洗。

  3. 请求优化与反爬虫策略:通过观察控制台日志信息,我们可以分析请求的发送频率、响应时间以及可能的异常情况,进而优化请求策略,降低被反爬虫策略拦截的概率。此外,当网站对爬虫进行反爬虫限制时,通过观察日志信息可以及时发现相关反爬虫机制,并针对性地调整爬虫的行为,提高爬取效率。

利用日志信息进行调试和优化

  1. 定位错误和异常:当爬虫运行出现错误或异常时,可以通过查看控制台日志信息来定位问题所在。根据日志中的报错信息和堆栈调用,我们可以追踪错误的源头,修复代码中的bug,并确保爬虫的正常运行。

  2. 优化数据提取:通过观察控制台日志中的解析过程日志,我们可以检查数据提取的结果,判断是否存在解析错误或缺失数据的情况。对于复杂的网页结构,可以根据日志信息调整解析规则,优化数据提取的准确性和效率。

  3. 网络请求优化:通过观察控制台日志中的请求和响应信息,我们可以评估爬虫的性能,发现潜在的网络瓶颈和延迟问题。根据日志中的响应时间和状态码,我们可以调整请求频率、使用异步请求等方式,优化爬虫的网络请求效率。

Scrapy数据的提取

在Web爬虫的开发中,数据提取是至关重要的一步。Scrapy框架作为一个高效、灵活的爬虫框架,提供了强大的数据提取和处理功能。

选择器(Selector)的基本使用

Scrapy提供了内置的选择器(Selector)类,它基于XPath和CSS选择器,用于从HTML或XML文档中提取数据。

我们创建一个选择器对象selector,并传入响应对象response。然后,我们使用XPath和CSS选择器提取了标题和内容,并通过get()getall()方法获取结果。最后,我们打印了提取的数据。

import scrapy

class MySpider(scrapy.Spider):
    name = 'example_spider'
    start_urls = ['http://example.com']

    def parse(self, response):
        # 创建选择器对象
        selector = scrapy.Selector(response=response)
        
        # 使用XPath提取数据
        title = selector.xpath('//h1/text()').get()
        
        # 使用CSS选择器提取数据
        content = selector.css('div.content p::text').getall()
        
        # 打印提取的数据
        print("Title:", title)
        print("Content:", content)

Item的定义与使用 

在Scrapy中,Item用于定义要提取的数据结构,类似于一个数据模型。

我们首先定义一个名为ProductItem的Item类,其中包含了namepricedescription等字段。然后,在parse方法中,我们实例化了一个ProductItem对象product,并通过选择器提取数据,并将提取的数据赋值给相应的字段。最后,通过yield语句将product对象返回。

import scrapy

class ProductItem(scrapy.Item):
    name = scrapy.Field()
    price = scrapy.Field()
    description = scrapy.Field()

class MySpider(scrapy.Spider):
    name = 'example_spider'
    start_urls = ['http://example.com']

    def parse(self, response):
        product = ProductItem()
        product['name'] = response.css('h1::text').get()
        product['price'] = response.css('.price::text').get()
        product['description'] = response.css('.description::text').get()
        yield product

数据处理与管道(Pipeline) 

 Scrapy的管道(Pipeline)提供了一种机制,用于对提取的数据进行处理和持久化存储。

我们定义一个名为DataPipeline的管道类,并实现了process_item方法。在process_item方法中,我们可以对提取的数据进行任何需要的处理,例如清洗、转换、计算等。在示例中,我们对item['data']进行了处理,并将处理后的结果存储在item['processed_data']中,最后返回处理后的item对象。

class DataPipeline:
    def process_item(self, item, spider):
        # 数据处理逻辑
        processed_data = self.process_data(item['data'])
        item['processed_data'] = processed_data
        return item

为了启用管道,需要在Scrapy配置文件(settings.py)中启用管道并设置优先级: 

ITEM_PIPELINES = {
    'myproject.pipelines.DataPipeline': 300,
}

以上配置将启用DataPipeline并设置其优先级为300。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/685520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python能跨平台吗?一文详解

Python 能跨平台吗&#xff1f;一文详解 Python 是一种高级编程语言&#xff0c;自问世以来就一直备受欢迎。其简洁明了的语法&#xff0c;高效率的开发和优秀的文档支持为 Python 赢得了数量众多的粉丝。与其他编程语言相比&#xff0c;Python 最大的优势之一是其可在多个操作…

基于Java应急资源管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

什么是HuggingFace

一.HuggingFace简介 1.HuggingFace是什么 可以理解为对于AI开发者的GitHub&#xff0c;提供了模型、数据集&#xff08;文本|图像|音频|视频&#xff09;、类库&#xff08;比如transformers|peft|accelerate&#xff09;、教程等。 2.为什么需要HuggingFace 主要是HuggingFace…

机器学习——决策树算法

一、实验目的 掌握如何实现决策树算法&#xff0c;用并决策树算法完成预测。 二、实验内容 本次实验任务我们使用贷款申请样本数据表&#xff0c;该数据表中每列数据分别代表ID、年龄、高薪、有房、信贷情况、类别&#xff0c;我们根据如下数据生成决策树&#xff0c;使用代…

Python基础 P7 字典和集合

文章目录 Python基础 P7 字典和集合字典字典基础内置函数增操作fromkeys()删操作pop()、popitems()和clear()改操作update()查操作get()和in/not in视图对象keys(),values(),items()拷贝copy()setdefault() 其他函数键值数量len()列表转换list()迭代器转换iter()逆向序列revers…

【初识C语言(1)】变量和常量

文章目录 1. 局部变量和全局变量2. 变量的作用域和生命周期3. 常量 生活中的有些值是不变的&#xff08;比如&#xff1a;圆周率&#xff0c;性别&#xff0c;身份证号码&#xff0c;血型等等&#xff09;有些值是可变的&#xff08;比如&#xff1a;年龄&#xff0c;体重&…

GitHub 上数百万个存储库可能容易被劫持

GitHub 上数以百万计的企业软件存储库很容易受到重新劫持&#xff0c;这是一种相对简单的软件供应链攻击&#xff0c;威胁行为者将依赖于特定存储库的项目重定向到恶意攻击。 研究人员在本周的一份报告中表示&#xff0c;这个问题与 GitHub 用户或组织更改项目名称或将其所有权…

chatgpt赋能python:Python自动执行程序:提高效率,降低出错率的利器

Python自动执行程序&#xff1a;提高效率&#xff0c;降低出错率的利器 随着科技的进步和信息技术的发展&#xff0c;人们越来越依赖计算机和自动化技术来完成繁琐的工作。自动化编程技术的应用也越来越广泛&#xff0c;其中Python自动执行程序被广泛使用。 Python自动执行程…

图像处理的两种变换:2D-DWT和Gabor变换

pywt官方API文档&#xff1a; 2D Forward and Inverse Discrete Wavelet Transform 目录 1. 二维离散小波变换2D-DWT 1.1 二维离散小波变换的相关公式 1.2 使用pywt实现2D-DWT 2. 窗口傅里叶变换Gabor 1. 二维离散小波变换2D-DWT DWT(Discrete Wavelet Transformation)代…

c语言通讯录——静态版本(带详细文字解释)

1.定义用于存储一个人信息的结构体 typedef struct PeoInfo {char name[NAME_MAX];int age;char sex[SEX_MAX];char addr[ADDR_MAX];char tele[TELE_MAX]; }PeoInfo;定义了一个名为 “PeoInfo” 的结构体&#xff08;struct&#xff09;类型&#xff0c;用于存储有关一个人的信…

MIAOYUN“一云多芯”全栈信创解决方案获认可!

信创&#xff0c;即信息技术产业创新&#xff0c;是数据安全、网络安全的基础&#xff0c;也是新基建的重要组成部分。信创产业发展已经成为经济数字化转型、提升产业链发展的关键&#xff0c;促进信创产业在本地落地生根&#xff0c;带动传统IT信息产业转型&#xff0c;构建区…

使用POI将excel文件导入到数据库

概要 随着时代变化&#xff0c;有的需求也会越来越多&#xff0c;例如&#xff1a;有的文件上千条数据需要导入数据库不可能手动一条条导入吧&#xff1f;太浪费时间了&#xff01;所以需要编写程序让程序来导入 整体架构流程 我这里使用的是springbootmybatisMVC的项目架构…

接口测试流程、测试点和测试工具

目录 前言&#xff1a; 一、什么情况下开展接口测试&#xff1f; 二、如何进行接口测试 三、接口测试用例设计 四、接口测试工具 前言&#xff1a; 接口测试是一种重要的测试类型&#xff0c;用于验证应用程序接口的功能、性能和可靠性。 一、什么情况下开展接口测试&am…

AtomicInteger源码

介绍 Atomic包是java.util.concurrent下的另一个专门为线程安全设计的Java包&#xff0c;包含多个原子操作类。这个包里面提供了一组原子变量类。其基本的特性就是在多线程环境下&#xff0c;当有多个线程同时执行这些类的实例包含的方法时&#xff0c;具有排他性&#xff0c;…

大坝渗流监测的目的和意义

​  大坝渗流监测是对坝体内渗流场进行的监测&#xff0c;是确保大坝安全运行的重要手段。通过监测&#xff0c;可以掌握渗流场的变化规律&#xff0c;并根据渗流场的变化趋势预测坝体、坝基可能出现的问题。通常根据渗漏量与渗流量两个指标来进行监测&#xff0c;即渗漏量小…

【ndarry的基本操作】——numpy03

目录索引 基本索引和切片&#xff1a;普通索引&#xff1a;省略索引&#xff1a;多省略索引&#xff1a;间隔索引&#xff1a; 形态变换操作&#xff1a;reshape()&#xff1a;resize()&#xff1a;transpose()&#xff1a;*通过参数进行转置&#xff1a;* flatten()&#xff1…

usb转8路串口模块

开源USB转8路串口PCB设计 文章目录 开源USB转8路串口PCB设计1. 简介2. 说明3. 一种跨电脑跨USB口的端口号自动识别方法4.开源地址 今天给大家介绍一款USB转8路串口的PCB设计&#xff0c;并提供一种跨电脑跨USB口的端口号自动识别方法。 1. 简介 芯片采用沁恒的CH348Q&#xff…

Kotlin Jetpack Compose - 实现Tab布局

Tab布局是一种常见的UI设计&#xff0c;它允许用户在不同的视图或数据集之间切换。我们将使用Jetpack Compose的 TabRow 和 ScrollableTabRow 组件来实现这个布局。 一、基本的Tab布局——TabRow 二、滚动的Tab布局——ScrollableTabRow 组件 三、自定义Tab组件 一、基本的T…

音视频数据处理-H265/HEVC视频码流分析

一、H265概述 H265/HEVC&#xff08;Hight Efficiency Video Coding&#xff09;是由ITU-T和ISO/IEC两大组织在H264/AVC的基础之上推出的新一代高效视频编码标准&#xff0c;主要为应对高清和超高清视频在网络传输和数据存储方面带来的挑战。上一篇文章对H264/AVC视频码流进行…

chatgpt赋能python:Python自动化定位元素的方法详解

Python自动化定位元素的方法详解 作为一名Python编程经验丰富的工程师&#xff0c;我经常需要用到自动化定位元素的方法。今天&#xff0c;我想与大家分享一下在Python中如何自动化定位元素&#xff0c;以帮助那些想要进行Web自动化测试的开发者们。 什么是自动化定位元素 在…