scrapy爬虫踩坑记录(代码片段)

ㄏ、Forgetˊ ㄏ、Forgetˊ     2022-12-08     788

关键词:

Scrapy作为一个优秀的爬虫框架,尽管其体系已相当成熟,但实际操作中其实还是需要借助其他插件的力量来完成某些网站的爬取工作,今天记录一下博主爬虫路上的一些坑及解决方案,避免大家走太多弯路。

一、DEBUG: Filtered duplicate request: GET xxx - no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates)

对网站全站爬取数据时,遇到了这个报错。
Scrapy会对request的URL去重(RFPDupeFilter),需要在scrapy.Request方法中传递多一个参数,dont_filter=True

# 示例
yield scrapy.Request(url=self.urlList[self.urlIndex], callback=self.parse, dont_filter=True)

二、多个爬虫集成selenium

如果你看过我上一篇Scrapy博文,就知道我是如何将selenium集成到Scrapy中。
其实,正确的做法,是需要将ChromeDriver的配置,转移到middlewares中,不然如果按照我上一篇博文那么去写,将其配置写在具体的各个蜘蛛里的话,先是会导致代码冗余,关键是还会导致启动一个蜘蛛的时候,会启动多个ChromeDriver

三、关于ChromeDriver的配置细则

直接上代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless") # 无头(静默)模式
chrome_options.add_argument("--disable-gpu") # 禁用GPU加速
chrome_options.add_experimental_option('prefs', "profile.managed_default_content_settings.images": 2)  # 非headless模式下不加载图片
chrome_options.add_argument('blink-settings=imagesEnabled=false')  # headless模式下不加载图片
driver = webdriver.Chrome(chrome_options=chrome_options)
# 浏览器静默模式下,最大化窗口是无效的 driver.maximize_window()
driver.set_window_size(1920, 1080)  # 设置浏览器窗口大小

某些网站对不同的分辨率所展示的内容不一,所以最好在同一的分辨率下去抓取网页,设置driver浏览器窗口的方法有两个driver.maximize_window()driver.set_window_size(1920, 1080),需要注意的是maximize_windowheadless模式下无效,所以推荐使用set_window_size

四、反爬虫进阶

往往某些网站,会配置反爬虫机制,诸如换USER_AGENTS换IP这些已经烂大街的操作我在这里就不提及了。
使用过selenium爬虫的人,都知道其实就算使用了模拟浏览器去访问某些网站,还是会被认定为爬虫做验证码拦截,而往往这个时候,你就算人工去做验证操作,网页往往还是一动不动,为什么?这里先推荐一个B站的视频给大家稍微科普一下。
被拦截的示例如下:

这是因为你所启动的浏览器,仍有太多你看不见的爬虫特征。这里给大家推荐一个冷门的插件selenium-stealth,这款插件可以集成selenium抹去ChromeDriver上的蜘蛛痕迹。
至于插件的原理,建议感兴趣的再自行研究stealth.min.js这个东西。
示例使用代码如下:

from selenium_stealth import stealth
chrome_options = Options()
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])
chrome_options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(chrome_options=chrome_options)
stealth(driver,
        languages=["en-US", "en"],
        vendor="Google Inc.",
        platform="Win32",
        webgl_vendor="Intel Inc.",
        renderer="Intel Iris OpenGL Engine",
        fix_hairline=True,
        )

可以结合上边的代码添加Options配置。
顺带提一点,使用headless模式跟stealth插件后,会导致ajax异步加载数据的网站,load不出来数据,原因不详,建议爬取这种网站的时候,如果该网站没有什么验证,可以将stealth关闭,或者关闭无头模式爬取。

五、绕过CloudFlare

相信大家做爬虫的,对五秒盾CloudFlare并不陌生,至于如何去绕过五秒盾的检测,推荐大伙一个插件cloudflare-scrape,专门用于绕过CloudFlare
实际操作流程请自行查看文档,可以拿这个网站练练手wallhere
不过实际操作中,有些网站就算用了这个插件也绕不过,比如博主想要爬取的网站就绕不过五秒盾,作为爬虫菜鸡,博主也不深究当场放弃(其他绕行方式不会)。

总结

这个世界上奇葩的网站多得是,遇到过令人作呕的商品具有六种格式的价格形式的;也遇到过网站禁用了js,用不了xpath的;还遇到过无限滚动加载,一个页面几千个DOM导致ChromeDriver假死的…
不扯淡了,路还很长,Keep learning…

python爬虫,利用scrapy来编写一个爬虫(代码片段)

本文将介绍我是如何在python爬虫里面一步一步踩坑,然后慢慢走出来的,期间碰到的所有问题我都会详细说明,让大家以后碰到这些问题时能够快速确定问题的来源,后面的代码只是贴出了核心代码,更详细... 查看详情

用scrapy爬虫框架读取统计局网站的行政区划(备忘记录)(代码片段)

不知不觉养成了一个习惯:完成一个工作或学习新知识后,要及时整理,否则过一段时间就忘记了。下面是用scrapy爬虫框架读取行政区划的记录1. SelectorGadget是个好东西,下载和安装可以网上查 安装后,会在crome浏览器右... 查看详情

使用scrapy编写爬虫程序中遇到的问题及解决方案记录(代码片段)

1、创建与域名不一致的Request时,请求会报错解决方法:创建时Request时加上参数dont_filter=True2、当遇到爬取失败(对方反爬检测或网络问题等)时,重试,做法为在解析response时判断response特征,失败时yieldRequest(response.url),但是... 查看详情

爬虫系列---scrapy框架学习(代码片段)

项目的需求需要爬虫某网的商品信息,自己通过Requests,BeautifulSoup等编写了一个spider,把抓取的数据存到数据库里面。 跑起来的感觉速度有点慢,尤其是进入详情页面抓取信息的时候,小白入门,也不知道应该咋个整,反正... 查看详情

scrapy爬虫:scrapy架构及原理(代码片段)

Scrapy爬虫(三):scrapy架构及原理 Scrapy爬虫三scrapy架构及原理scrapy爬虫尝鲜scrapydataflow流程图scrapy项目结构 scrapy爬虫尝鲜scrapy现在已经完美支持python3+,所以后面的实例我都会使用python3+的环境。首先我们来尝下鲜,下面的... 查看详情

scrapy使用详细记录(代码片段)

这几天,又用到了scrapy框架写爬虫,感觉忘得差不多了,虽然保存了书签,但有些东西,还是多写写才好啊 首先,官方而经典的的开发手册那是需要的:https://doc.scrapy.org/en/latest/intro/tutorial.html  一、创建项目命令行cd... 查看详情

[爬虫]学scrapy,顺便把它的官方教程给爬下来(代码片段)

想学爬虫主要是因为算法和数据是密切相关的,有数据之后可以玩更多有意思的事情,数据量大可以挖掘挖掘到更多的信息。之前只会通过python中的request库来下载网页内容,再用BeautifulSoup、re正则工具来解析;后来了解到Scrapy... 查看详情

centos7搭建scrapy爬虫环境(代码片段)

写在前面因为之前的爬虫环境一直是部署在我自己本地的电脑上的,最近,写了一个监控别人空间的爬虫,需要一直线上24小时运行,所有就打算云服务器上部署环境,也捣鼓了好一会才弄好,还是有一些坑,这里先记录一下,方便以后复... 查看详情

scrapy框架爬虫(代码片段)

一、sprapy爬虫框架 pipinstallpypiwin32 1)创建爬虫框架scrapystartprojectProject#创建爬虫项目Youcanstartyourfirstspiderwith:cdProjectscrapygenspiderexampleexample.comcdProject#进入项目scrapygenspiderchoutichouti.co 查看详情

爬虫框架scrapy之---scrapy文件(代码片段)

框架简介核心部分:引擎、下载器、调度器自定义部分:spider(自己建的爬虫文件)、管道(pipelines.py) 目录结构firstSpiderfirstSpiderspiders爬虫目录(写代码位置)__init__.pymyspider.py自己建的爬虫文件,以后的爬虫代码写在这里__init__.p... 查看详情

爬虫——scrapy入门(代码片段)

scrapy安装scrapypipinstallscrapywindows可能安装失败,需要先安装c++库或twisted,pipinstalltwisted创建项目scrapystartprojecttutorial该命令将会创建包含下列内容的tutorial目录:tutorial/scrapy.cfgtutorial/__init__.pyitems.pypipelines.pysetting 查看详情

爬虫框架scrapy使用(代码片段)

一、创建爬虫项目  1.创建爬虫项目    Scrapy  startproject  myproject(爬虫项目名)  2.myproject项目文件夹中包含:    1.同名(myproject)文件夹      2.cfg配置文件(指定项目文件--myproject,指定项目文件的配... 查看详情

爬虫框架——scrapy(代码片段)

一、Scrapy介绍1、Scrapy是什么  Scrapy是一个开源和协作的框架,其最初是为了页面抓取(更确切来说,网络抓取)所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于... 查看详情

4.scrapy爬虫文件(代码片段)

scrapy.Spider这一节我们来聊一聊爬虫文件1.请求发送#-*-coding:utf-8-*-importscrapyclassBaiduSpider(scrapy.Spider):name=‘baidu‘allowed_domains=[‘baidu.com‘]start_urls=[‘http://baidu.com/‘]defparse(self,response):print(re 查看详情

爬虫框架之scrapy(代码片段)

爬虫框架之Scrapy一、介绍二、安装三、命令行工具四、项目结构以及爬虫应用简介五、Spiders六、Selectors七、Items八、ItemPipelin九、DowloaderMiddeware十、SiderMiddlewear十一、自定义扩展十二、setitings.py十三、获取亚马逊商品信息一、介... 查看详情

scrapy分布式爬虫实战:scrapy基础知识(代码片段)

目录一、Scrapy简介二、Scrapy安装和配置三、ScrapyShell抓取Web资源Scrapy是一个非常优秀的爬虫框架,通过Scrapy框架,可以非常轻松地实现强大的爬虫系统,我们只需要将精力放在抓取规则以及如何处理抓取的数据上即可,本章介绍S... 查看详情

爬虫--scrapy框架的基本使用(代码片段)

流程框架安装Scrapy:  (1)在pycharm里直接就可以进行安装Scrapy       (2)若在conda里安装scrapy,需要进入cmd里输入指令condainstallscrapy Scrapy框架的搭建1、先创建scrapy工程scrapystartprojectquotetutorial在pycharm里的Terminal里... 查看详情

爬虫之scrapy框架(代码片段)

一scrapy框架简介1介绍Scrapy一个开源和协作的框架,其最初是为了页面抓取(更确切来说,网络抓取)所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如数据挖掘、... 查看详情