爬虫必备,案例对比 Requests、Selenium、Scrapy 爬虫库!

简析selenium和scrapy对接 selenium和 Scrapy对接 爬取某些需要动态加载的页面,使用selenium模块是诸多方法中的一个,直接使用selenium模块并不复杂, 在Scrapy框架下依然可以使用该模块解决动态加载的问题. 首先再熟悉下流程 Scrapy的基本流程图如下 引擎负责控制系统所有组件之间的数据流,并在某些动作发生时触发事件。 调度器(用来接受引擎发过来的请求, 压入队列中, 并在引擎... 阅读详情

经常有读者会爬虫学哪个库?其实常用的 Python 爬虫库无非是requests,selenium和scrapy,且每个库都有他们的特点,对于我来说没有最推荐的库只有最合适库,本文就将基于一个简单的爬虫案例(Python爬取起点中文网)来对比分析(从时间角度)三个库

e2c8ecb36b3cc56aea047901667cce8d.png

目标需求为批量采集排行榜书籍信息,如下图所示:54e1c687b6b683e4d05405c9a924f6fd.png

页面结构很容易分析出来,排行榜100条书籍信息,一个静态页面包含20条数据。使用不同的第三方库进行数据解析并提取数据,分别是:

  • requests

  • selenium

  • Scrapy

然后再逻辑代码的开头和结尾加上时间戳,得到程序运行时间,进行效率对比。

这里由于都是使用xpath提取数据,三种方式xpath语句大同小异,这里提前数据解析说明:

b7aca8c7597961ad1f8a717258c1e959.png
1. imgLink: //div[@class='book-img-text']/ul/li/div[1]/a/@href
2. title:  //div[@class='book-img-text']/ul/li//div[2]/h4/a/text()
3. author:  //div[@class='book-img-text']/ul/li/div[2]/p[1]/a[1]/text()
4. intro:  //div[@class='book-img-text']/ul/li/div[2]/p[2]/text()
5. update://div[@class='book-img-text']/ul/li/div[2]/p[3]/a/text()

一、requests

首先导入相关库

from lxml import etree
import requests
import time

逻辑代码如下

start = time.time()                 # 开始计时⏲

url = 'https://www.qidian.com/rank/yuepiao?style=1&page=1'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'
}

page = requests.get(url,headers=headers)
html = etree.HTML(page.content.decode('utf-8'))
books = html.xpath("//div[@class='book-img-text']/ul/li")

for book in books:
    imglink = 'https:' + book.xpath("./div[1]/a/@href")[0]
 # 其它信息xpath提取,这里省略 ....
    update = book.xpath("./div[2]/p[3]/a/text()")[0]
    print(imglink,title,author,intro,update)

end = time.time()                  #  结束计时⏲

print(end-start)

程序运行结果如下8e4d4aa49bdd89589864026103b1b259.png

可以看到用时 0.823s 将全部数据爬取下来。

二、 selenium

首先导入相关库

import time
from selenium import webdriver

代码实现如下

url = 'https://www.qidian.com/rank/yuepiao?style=1&page=1'

start = time.time()                 # 开始计时⏲
driver = webdriver.Chrome()
driver.get(url)
books = driver.find_elements_by_xpath("//div[@class='book-img-text']/ul/li")

for book in books:
    imglink = 'https:' + book.find_element_by_xpath("./div[1]/a").get_attribute('href')
 # 其它小说信息的定位提取语句,...
    update = book.find_element_by_xpath("./div[2]/p[3]/a").text
    print(imglink,title,author,intro,update)

end = time.time()                   #  结束计时⏲

print(end-start)
# 18.564752340316772

运行结果如下8d4722439638d79b92e85760cdbc94bc.png

可以看到时间是18.8174s

三、Scrapy

最后是 Scrapy 实现,代码如下

import scrapy
import time


class QdSpider(scrapy.Spider):
    name = 'qd'
    allowed_domains = ['qidian.com']
    start_urls = ['https://www.qidian.com/rank/yuepiao?style=1&page=1']


    def parse(self, response):
        start = time.time()               # 开始计时⏲

        books = response.xpath("//div[@class='book-img-text']/ul/li")

        for book in books:
            imglink = 'https:' + book.xpath("./div[1]/a/@href").extract_first()
            # 其它信息的xpath提取语句,......
            update = book.xpath("./div[2]/p[3]/a/text()").extract_first()
            print(imglink, title, author, intro, update)

        end = time.time()               #  结束计时⏲

        print(end - start)

运行结果如下f09c4b83ca85ec724c16eeb22af6cd15.png

可以看到运行时间仅仅用了0.016s

四、结果分析

从代码量来看的话:其实代码量相差不大,因为实现逻辑比较简单。

但从运行时间来看的话:scrapy 是最快的只花了0.02s不到,selenium 是最慢的,花了将近20s,运行效率是 scrapy 的1/1000。不过scrapy开发、调试代码的时间相比于 requests、selenium 回长一点,

在仔细研究一下原因

“

requests:requests模拟浏览器的请求,将请求到的网页内容下载下来以后,并不会执行js代码。

selenium为什么最慢:首先Selenium是一个用于Web应用程序自动化测试工具,Selenium测试直接运行在浏览器中(支持多种浏览器,谷歌,火狐等等),模拟用户进行操作,以得到网页渲染之后的结果,selenium解析执行了网页CSS,js代码,所以效率较低。

scrapy框架爬取效率最高:首先同requests一样,scrapy它也没有执行网页js代码,但是我们知道scrapy他说一个提取结构性数据的应用框架,Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度,并发性好,性能较高,所以它的效率最高。

”

五、补充

通过上面的简单测试,我们可能会觉得selenium效率如此低下,是不是数据采集不太常用selenium?只能说在能够爬取到数据的前提下,采集效率高的方式才会作为首选。

所以本文的目的不是为了说明不要使用selenium,接下来我们看看招聘网站--拉勾招聘的页面数据采集。随机选择一个岗位java,页面如下:41e724c8d125ecf833e291288ac2ded1.png

5.1 requests实现

如果是用 requests 请求数据6e07ed639d46c4b66d59de401d7bbefd.png

你会发现并没有数据,网页做了反爬处理,这时候selenium就派上用场了,不用分析网站反爬方式,直接模拟用户请求数据(大多数情况下,也有针对selenium的反爬手段)

5.2 selenium实现

如上文所说,如果是用 requests 或者 scrapy爬虫发现有反爬措施,可以尝试selenium,有时会异常简单

from selenium import webdriver

url = 'https://www.lagou.com/zhaopin/Java/?labelWords=label'

driver = webdriver.Chrome()
driver.get(url)
items = driver.find_elements_by_xpath("//ul[@class='item_con_list']/li")
print(len(items))
for item in items:
    title = item.find_element_by_xpath("./div[1]/div[1]/div[1]/a/h3").text
    print(title)

运行结果如下:e952dcf65492e704bde343c241b99585.png

很轻松就提取到了页面的数据!

所以根据本文的案例分析,如果有爬虫需求时,将方法定格在某一个方法并非是一个很好的选择,大多情况下我们需要根据对应网站/app的特点以及具体需求,来综合判断,挑选出最合适的爬虫库!


 

万水千山总是情,点个 👍 行不行。


 

 

推荐阅读:

入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径

量化: 定投基金到底能赚多少钱?  | 我用Python对去年800只基金的数据分析

干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析|   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记灯谜答题王 |用Python做个海量小姐姐素描图碟中谍这么火,我用机器学习做个迷你推荐系统电影

趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!

AI: 会做诗的机器人给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影

小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

年度爆款文案


 

 

 

 

 

 


 

 

 
点阅读原文,领AI全套资料!
Python网络爬虫开发实战:从Requests到Scrapy的完整避坑指南 网络爬虫是一种自动化抓取网页信息的程序,其核心原理是模拟浏览器发送HTTP请求并解析响应数据。这项技术对于数据采集、市场分析和信息聚合具有重要价值,广泛应用于搜索引擎、价格监控和舆情分析等场景。在工程实践中,开发者常需应对反爬机制、数据解析和异步处理等挑战。本文以Python生态为核心,深入探讨了Requests库的请求发送、BeautifulSoup的HTML解析以及Scrapy框架的高效爬取,并提供了处理Headers、IP代理等反爬策略的实战方案。通过一个完整的图书信息爬取项目,系统展示了从环境搭建、 阅读详情

相关推荐

Python爬虫实战:从requests到Scrapy的抓取、解析与存储全解析

网络数据抓取是数据采集与处理的基础技术,其核心原理是通过程序模拟浏览器行为,自动从互联网获取结构化信息。这项技术的价值在于为数据分析、市场研究、机器学习等应用场景提供高质量、大规模的数据源。在工程实践中,Python因其丰富的库生态成为爬虫开发的首选语言。其中,requests库简化了HTTP请求过程,而BeautifulSoup和lxml则分别提供了灵活与高性能的HTML解析方案。面对反爬机制,开发者需要掌握请求头伪装、IP代理池和异步并发等关键技术。对于复杂项目,Scrapy框架通过其模块化架构提供了完

weixin_30466039的博客 376

Python爬虫实战使用scrapy与selenium来爬取数据

当学会使用Scrapy 和 Selenium后的那就试试通过Scrapy 驱动 Selenium来获取数据,可以绕过JS解密的耗时,缺点是可能爬取数据的速度会变慢慢。Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。

weixin_45688123的博客 3510

Python大数据分析&人工智能教程:Selenium和Scrapy动静结合爬取技术

Selenium是一个用于Web应用程序测试的工具,它提供了模拟用户交互的功能,包括点击、滚动、输入等操作。在爬虫领域,Selenium的动态爬取原理主要体现在其能够处理JavaScript渲染的页面,这是传统静态爬虫无法做到的。 Scrapy是一个快速的高级Web爬虫和Web抓取框架,用于爬取网站并从页面中提取结构化的数据。Scrapy的静态爬取原理主要体现在其对静态页面内容的快速处理能力。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1534

爬虫选择大战:Scrapy vs Selenium,谁主沉浮?

Scrapy是一个基于Python的快速、高级别的屏幕抓取和网页抓取框架,用于抓取网站并从中提取结构化数据。它采用了异步下载引擎Twisted,具有出色的性能和可扩展性。Selenium则是一个用于Web应用程序测试的工具,它模拟用户在浏览器中的操作,如点击、填写表单等。虽然Selenium并非专为爬虫设计,但其强大的浏览器模拟能力使得它在处理动态网页、JavaScript渲染等方面具有独特优势。

weixin_71807218的博客 2192

Python爬虫教程之五大重要库入门使用教程Scrapy、Requests、Urllib、Beautiful Soup、Selenium(教程含源码)

请求通常包含在Python的内置库中。但是,如果由于某种原因您无法立即导入它,您可以使用pip轻松安装它。您可以使用请求来获取和清理组织良好的API响应。例如,假设我想在OMDB数据库中查找一部电影。请求允许我向API发送电影名称,清理响应,并在不到10行代码中打印出来——如果我们省略了注释#APIURLsearch})好消息是,您不需要安装Urllib,因为它是内置Python库的一部分。但是,在极少数情况下,您可能在Python包中找不到Urllib。...

iCloudEnd的博客 1123

从入门到精通,搞定数据采集!《Python3网络爬虫数据采集》必入指南

《Python3网络爬虫数据采集》是一本实战导向的爬虫技术指南,通过基础、实战和框架三大模块,系统讲解数据采集全流程。书中涵盖网站分析、数据抓取与清洗等核心技能,并提供12306抢票、微博爬取等真实案例,帮助读者快速掌握Python爬虫技术。特别适合零基础学习者和开发者提升技能,培养从数据采集到存储部署的全链路能力,有效增强职场竞争力。

2401_87690752的博客 1674

深度剖析Selenium与Scrapy的黄金组合:实现动态网页爬虫

在实际应用中,首先确保Scrapy和Selenium已正确安装,并配置好ChromeDriver等必要工具。接着,创建Scrapy项目,添加Selenium中间件,进而实现动态网页的爬取。

aobulaien001的博客 4892

手把手教你校准垂起固定翼(VTOL)遥控器与电调:从零到飞的完整流程

本文详细介绍了垂起固定翼(VTOL)遥控器与电调的校准流程,从基础认知到飞行前检查,涵盖遥控器通道配置、电调校准、舵机方向调整等关键步骤。通过图文并茂的指导,帮助无人机爱好者安全完成VTOL调试,确保首飞成功。特别强调多旋翼模式、过渡模式和固定翼模式的设置要点,适合新手和进阶用户参考。

jenkins8butler的博客 361

『哈士奇赠书33期』- 『Python网络爬虫入门到实战』

『哈士奇赠书33期』- 『Python网络爬虫入门到实战』

易编橙 · 终身成长社群,相遇已是上上签! 1万+

搭建Dzzoffice 教程

通过以上步骤,您已经成功配置了WEB环境,安装了DzzOffice,并完成了系统设置和应用安装。1.安装包的设置默认是系统盘之外的第二个盘,没有其他盘符的时候则安装在C盘,当主机盘符只有C盘可用的时候,安装时不要使用U盘,否则可能误装到U盘当中。4.如果之前已经安装,再次安装时请确保上次安装已经卸载或者所有文件可读,否则请备份文件,卸载之后再安装。在其他安装环境中,我没有相关的使用经验。3. 保证安装路径是纯净的,安装路径下不能有已安装的V8版本,若重新安装,请选择其它路径。

小胡的博客 4957

C#实战:如何用Bartender 10.1实现动态打印与批量打印(附完整源码)

本文深入探讨了如何在C#项目中高效集成Bartender 10.1,实现企业级的动态打印与批量打印功能。文章提供了从环境配置、COM接口精讲、高可用打印服务类封装,到批量打印性能优化及生产环境部署的全套实战方案与源码,帮助开发者构建健壮、可维护的打印解决方案。

weixin_29290963的博客 438

【hacker送书活动第7期】Python网络爬虫入门到实战

【hacker送书活动第7期】Python网络爬虫入门到实战,由全网50万粉丝的专家级博主不吃西红柿、川川倾力打造!!!

hacker707的博客 9604

避坑指南:Xilinx SelectIO IP核官方例程里那些容易忽略的细节(复位、时钟与数据回环)

本文深入解析Xilinx SelectIO IP核设计中复位策略、时钟域交互和数据回环验证三大关键领域的实战避坑技巧。针对官方例程中易被忽视的细节,如复位同步链深度、时钟相位约束和数据对齐机制,提供经过项目验证的优化方案,帮助工程师节省80%以上的调试时间。特别适用于FPGA开发中高速接口设计场景。

weixin_42561476的博客 450

python网络爬虫软件哪个好用_Python网络爬虫之必备工具

网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。那么要学会并精通Python网络爬虫,我们需要准备哪些知识和工具那?1 Python基础知识Python作为现在最流行的编程语言之一,其强大之处也是毋庸置疑的,利用Python写网络爬虫是最好不过的选择啦,所以万丈高楼平地起,学习网络爬虫最最基本的就是要掌握Python编程的基础知识,了解以下几点即...

weixin_39841825的博客 1055

FPGA_AD9361实战

1.参考网站。

Pual_Georg的博客 751

TBOX电源方案的详细讲解与分析

输入保护电路是确保车载电子系统稳定性的关键。通过合理选择TVS二极管、保险丝和浪涌抑制器等元器件,能够有效防止来自电源系统的瞬态过电压、浪涌和过流问题,保护后续电路免受损害。针对不同的电源环境和应用场景,可以通过提升功率、优化热管理以及选择高效元器件来进一步提高系统的保护能力和可靠性。

weixin_43199439的博客 1077

2022年网络我的网络爬虫学习心得

主要记录我自己从开始学习Python基础、接触爬虫、初次实现爬虫,再到独立完成爬虫项目并成功爬取以海外网的过程。

m0_62021282的博客 3694

【ComfyUI】SD1.5 + ControlNet 边缘检测融合动漫转真人

本文介绍了一个基于ComfyUI的动漫转真人图像生成工作流,通过多模型协同实现高质量的二次元图像转换。该工作流集成了Canny线稿预处理、ControlNet结构控制、VAE编码解码和人脸精细化处理等核心环节,采用majicmixRealistic_v7作为主模型,配合yolov8、SAM等辅助模型。整个流程包含11个标准化步骤,从图像输入、预处理到最终超分输出,通过ControlNet引导和CLIP语义控制确保生成图像的写实感和结构准确性,特别针对人脸区域进行专业优化,最终可输出高分辨率写实人像。

Mr数据杨 1134

Python爬虫必备库:从入门到“入土”

Requests是Python中最常用的HTTP库,简单易用,功能强大。它允许你发送HTTP请求,获取网页内容,是爬虫的“敲门砖”。是一个用于解析HTML和XML文档的库,它能够帮助你从复杂的网页结构中提取出所需的数据。有了它,你再也不用担心被HTML标签“绕晕”了。Scrapy是一个强大的爬虫框架,适合大规模的数据抓取。它提供了完整的爬虫解决方案,包括请求调度、数据提取、数据存储等。如果你需要爬取大量数据,Scrapy是你的不二之选。Selenium。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 1220

【WorkBuddy专栏39】零基础也能做小程序——WorkBuddy微信小程序开发完全指南

【WorkBuddy专栏39】零基础也能做小程序——WorkBuddy微信小程序开发完全指南

AI人人懂 3201

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Python 网络爬虫的常用库汇总

爬虫的编程语言有不少,但 Python 绝对是其中的主流之一。下面就为大家介绍下 Python 在编写网络爬虫常常用到的一些库。 请求库:实现 HTTP 请求操作 urllib:一系列用于操作URL的功能。 requests:基于 urllib 编写的,阻塞式 HTTP 请求库,发出一个请求,一直等待服务器响应后,程序才能进行下一步处理。 selenium:自动化测试工具。一个调用浏览...

alss13237的博客 657

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python网络爬虫用到哪些技术_Python爬虫所用到的技术有哪些

python爬虫一般用哪个模块XPath 是一门在 XML 文档中查找信息的语言。python的爬虫框架scrapy不是用正则匹配来查找字符串,而是用xpath。python爬虫需要学什么模块和框架框架常用的有:scrapy ,pyspider 库比较多:requests, bs4。Python有哪些常见的,好用的爬虫框架由于项目需分享收集并使用过一些爬虫相关库,做过一些对比分析。以下是小编接触过...

weixin_34485012的博客 3235

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Python网络爬虫技术:从基础到实战应用

网络爬虫是一种自动化获取互联网信息的程序,通过模拟人类浏览行为实现高效数据采集。其核心技术包括HTTP请求处理(如Requests库)、动态页面解析(如Selenium)以及框架级解决方案(如Scrapy)。在数据驱动时代,爬虫技术显著提升了数据采集效率与一致性,广泛应用于电商监控、舆情分析和市场研究等领域。针对反爬机制,开发者需要掌握User-Agent轮换、代理IP池等应对策略。值得注意的是,Scrapy框架通过Spider、Pipeline等组件实现了爬虫工程化,而分布式架构和性能优化技巧则解决了大规

weixin_30367169的博客 469

Python爬虫常用哪些库?

经常游弋在互联网爬虫行业的程序员来说,如何快速的实现程序自动化,高效化都是自身技术的一种沉淀的结果,那么使用Python爬虫都会需要那些数据库支持?下文就是有关于我经常使用的库的一些见解。

libaiup的博客 3223
上一篇: 卧槽!算法岗又爆了!
下一篇: Linux 命令 su 和 sudo 的区别?
菜鸟学Python
博客等级 码龄9年 8089粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值