【一】python3+Scrapy:爬虫框架问题合集 【参考转载大佬文章 + 自己解决方法】

中文教程:

链接: Scrapy 2.5 documentation

链接: Scrapy : Settings字段详解

1、发送请求403报错排查

参考链接: 使用scrapy做爬虫遇到的一些坑:爬虫使用scrapy爬取网页返回403错误大全以及解决方案
参考链接: 使用scrapy做爬虫遇到的一些坑:网站常用的反爬虫策略,如何机智的躲过反爬虫Crawled (403)
参考链接: 如何查看scrapy 爬取过程中的报错(附解决方法及运行结果解读)

2、scrapy报错解决[twisted.internet.error.TimeoutError: User timeout caused connection failure:]

参考链接: scrapy报错解决[twisted.internet.error.TimeoutError: User timeout caused connection failure:]

解决方法为:

在middleware中,捕获这个报错,并返回request,让他重新请求这个对象

from twisted.internet.error import TimeoutError

class ScrapyBzDownloaderMiddleware:

    @classmethod
    def from_crawler(cls, crawler):
        # This method is used by Scrapy to create your spiders.
        s = cls()
        crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
        return s

    def process_request(self, request, spider):
        return None

    def process_response(self, request, response, spider):
        if response.text == None:
            print ('响应为空,重新发送请求......')
            return request
        else:
            return response
            
    def process_exception(self, request, exception, spider):
        if isinstance(exception,TimeoutError):
            print ('响应超时,重新请求......')
            return request

3、同一个网站,同一个请求头,request可以成功,scrapy却不行

我自己的试过所有方法都不行,最后在scrapy中请求,host放到第一个就可以了
在这里插入图片描述

4、报错:[scrapy.core.scraper] ERROR: Spider must return request, item, or None, got ‘str’ in <GET https://XXX>

上一个函数中使用了:yield关键字,回调函数是下一个get_page_urls函数,则在get_page_urls中的return返回的类型必须是:请求、item、None这3个类型,其他类型会报错,一开始我返回的一个列表报错,改了之后就好了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

参考链接: 已解决TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

出现连接超时要么是因为爬虫访问过快导致对方服务器连接超时,要么是因为被发现是爬虫程序了。

第一种解决方法:循环抓错,重复请求:
第二种解决方法:构建headers列表每次随机选一个
第三种方法解决方法:放慢请求速度
第四种方法解决方法:爬虫代码设置代理ip

6、vscode多个快捷键重合

因为安装了推荐的Notepad++ keymap扩展,卸载就可以了
在这里插入图片描述

7。报错:too many values to unpack (expected 2)

在这里插入图片描述
自己改了data字符为列表,在请求中没有更改,报错

8、使用yield提交item数据,数据重复,不正确- 使用深度复制

参考下面博主方法即可:使用深度复制

参考链接: 提莫_:scrapy里面item传递数据后数据不正确的问题

import copy

yield copy.deepcopy(item)

在这里插入图片描述

引入copy模块,改为深复制即可,在这里插入图片描述

9、python代码获取正常windows路径,打包exe后在windows环境下获取工作目录路径为C:\Users\用户名\AppData\Local\Temp…

链接: python脚本打包成exe文件获取当前路径的问题

链接: python3 在编辑器和打包成exe后获取当前文件路径的不同
参考链接: python获取工作目录路径为C:\Users\用户名\AppData\Local\Temp…解决方案
参考链接: python获取windows路径_python在windows环境下获取工作目录路径为C:\Users\用户名\AppData\Local\Temp…

以下代码

import sys, os

print (os.path.dirname(os.path.realpath(sys.argv[0])))

10、scrapy中取消所有日志打印、不影响代码运行的提醒

1、scrapy运行日志

在setting.cfg文件中更改日志级别

# 屏蔽log日志
LOG_LEVEL="WARNING"

在这里插入图片描述

在这里插入图片描述

2、selenium在cmd运行提示设备连接失败:DevTools listening on ### USB: usb_device_handle_win.cc:1046 Failed to read descriptor from node connection: 连到系统上的设备没有发挥作用。
参考链接: 记录一个selenium和scrapy 框架一起使用出错的记录,以及解决它的方法

# 配置选项
options = webdriver.ChromeOptions()
# 忽略证书错误
options.add_argument('--ignore-certificate-errors')
# 忽略 Bluetooth: bluetooth_adapter_winrt.cc:1075 Getting Default Adapter failed. 错误
options.add_experimental_option('excludeSwitches', ['enable-automation'])
# 忽略 DevTools listening on ws://127.0.0.1... 提示
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(options=options)

在这里插入图片描述

3、requests使用verify=false,运行提示:
InsecureRequestWarning: Unverified HTTPS request is being made to host ‘www.dytt89.com‘

参考链接: requests.exceptions.SSLError 请求异常,SSL错误,证书认证失败问题解决
参考链接: 【解决】InsecureRequestWarning: Unverified HTTPS request is being made to host ‘www.dytt89.com‘

代码:

import requests
requests.packages.urllib3.disable_warnings() #取消证书的验证verify=False问题警告信息

4、运行scrapy会有警告日志:[py.warnings] WARNING: C:\Python311\Lib\site-packages\scrapy\selector\unified.py:83: UserWarning: Selector got both text and root, root is being ignored.
参考链接: Python之warnings模块忽略warning警告错误
使用代码:

import warnings
warnings.filterwarnings("ignore") #去除不影响程序运行的警告

在这里插入图片描述

11、解决selenium正常进入没问题,headless无头模式报错的问题

参考链接: 解决selenium正常进入抖音没问题,headless无头模式报错的问题

在options中添加用户头即可

#防止有的元素在无头模式下无法操作,加入谷歌浏览器的user-agent信息,版本信息不能超过驱动的版本,否则无头模式会报错
chrome_options.add_argument("User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like 

12、scrapy 报错twisted.webnewclient.ResponseNeverReceived


参考链接: scrapy 报错twisted.webnewclient.ResponseNeverReceived。。。及附上请求头大全

评论:代理问题,关闭即可
在这里插入图片描述

13、scrapy爬虫的性能优化

1、减少发送请求次数,减少读取文件次数可以提高运行速度

链接: scrapy重试机制_针对特定网站scrapy爬虫的性能优化
链接: scrapy 速度优化
链接: Scrapy效率提升篇

14、爬取动态网页:Ajax加载、js加密、数据加密,懒人方法:使用selenium打开浏览器获取内容

链接: 【网络爬虫】基于Selenium爬取动态网页
链接: Python爬虫遇上动态加载
链接: 有关爬虫加载Ajax数据或请求json数据集的(快速高效)方法

15、python虚拟环境使用、打包成exe、文件太大问题

链接: 最全的Python虚拟环境使用方法

链接: Python可视化打包工具auto-py-to-exe 增强版Pyinstaller
链接: python—auto-py-to-exe—.py文件打包成.exe文件最全最详细(用不同的类别做教程)

链接: Python打包成exe,文件太大问题解决办法(比保姆级还保姆级)
链接: python程序打包成exe可执行程序(超级简单版)
链接: Python打包exe程序(pyinstaller)以及打包文件太大的解决方法

16、如何在双python下设置python3为默认

链接: 如何在双python下设置python3为默认

17、Scrapy从脚本运行爬虫的5种方式

链接: Scrapy从脚本运行爬虫的5种方式

18、Scrapy爬虫项目中避免被禁止爬虫的几种方法

链接: Scrapy爬虫项目中避免被禁止爬虫的几种方法

链接: Scrapy设置下载延时和自动限速

19、Scrapy进程卡死:不报错,不退出,卡死到某一步无反应

我在scrapy中使用了requests,requests命令没加timeout=10,导致无限connection,因此假死,requests是同步框架,运行时等待返回结果,scrapy其他的异步请求会被卡住,无法工作

链接: 三个爬虫写完的坑,防止以后再发生
链接: 记一次Scrapy进程卡死的Debug过程
链接: 使用py-spy解决scrapy卡死的问题
链接: Scrapy 框架里爬取多页数据 yield 卡住的问题

20、在Scrapy中如何使用aiohttp、asyncio

链接: 官方方法:协同程序

下面是官网的例子:

class MySpiderDeferred(Spider):
    # ...
    async def parse(self, response):
        additional_response = await treq.get('https://additional.url')
        additional_data = await treq.content(additional_response)
        # ... use response and additional_data to yield items and requests

class MySpiderAsyncio(Spider):
    # ...
    async def parse(self, response):
        async with aiohttp.ClientSession() as session:
            async with session.get('https://additional.url') as additional_response:
                additional_data = await additional_response.text()
        # ... use response and additional_data to yield items and requests
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值