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

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

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

  • requests

  • selenium

  • Scrapy

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

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

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)

程序运行结果如下

可以看到用时 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").textprint(imglink,title,author,intro,update)end = time.time()                   #  结束计时⏲print(end-start)
# 18.564752340316772

运行结果如下

可以看到时间是18.8174s

三、Scrapy

最后是 Scrapy 实现,代码如下

import scrapy
import timeclass 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)

运行结果如下

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

四、结果分析

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

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

在仔细研究一下原因

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

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

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

五、补充

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

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

5.1 requests实现

如果是用 requests 请求数据

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

5.2 selenium实现

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

from selenium import webdriverurl = '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").textprint(title)

运行结果如下:

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

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

万水千山总是情,点个 

爬虫必备,案例对比 Requests、Selenium、Scrapy 爬虫库!相关推荐

  1. 知己知彼,案例对比 Requests、Selenium、Scrapy 爬虫库!

    大家好,我是早起. 经常有读者会爬虫学哪个库?其实常用的 Python 爬虫库无非是requests,selenium和scrapy,其实每个库都有他们的特点,对于我来说没有最推荐的库只有最合适库,本 ...

  2. python 基金净值_Python爬虫周记之案例篇——基金净值Selenium动态爬虫

    在成功完成基金净值爬虫的爬虫后,简单了解爬虫的一些原理以后,心中不免产生一点困惑--为什么我们不能直接通过Request获取网页的源代码,而是通过查找相关的js文件来爬取数据呢? 有时候我们在用req ...

  3. 爬虫模拟登陆手机验证码_Python+scrapy爬虫之模拟登陆

    一.126,163邮箱模拟登陆 # -*- coding:utf-8 -*-import timefrom selenium import webdriverdef login126_or_163em ...

  4. Python爬虫系列:腾讯课堂Scrapy爬虫

    业务需求: 需要爬取腾讯课堂IT.互联网类别下的云计算大数据子类别下的所有课程数据: 课程名称.价格.购买人数.机构名称 1.编写item.py文件 定义要爬取的数据字段: import scrapy ...

  5. Scrapy爬虫框架视频学习

    文章目录 Scrapy爬虫框架 1. 框架架构 1.1 Scrapy框架介绍 1.2 Scrapy架构图 1.3 Scrapy框架模块功能 1.4 Scrapy的运作流程(容易理解的介绍) 2. Sc ...

  6. scrapy爬虫框架及运行流程

    文章目录 1 scrapy 简介 1.1 什么是爬虫? 1.2 浏览网页的过程中发生了什么? 1.3 scrapy爬虫框架 1.4 scrapy爬虫框架优势 2 scrapy 构架图 3 Scrapy ...

  7. selenium+python爬虫全流程教程

    python+selenium爬虫全流程详解 selenium+python爬虫简介 selenium测试脚本 python+selenium 模拟浏览器----以chrome为例 浏览器驱动安装 浏 ...

  8. 手把手教你如何新建scrapy爬虫框架的第一个项目(下)

    前几天小编带大家学会了如何在Scrapy框架下创建属于自己的第一个爬虫项目(上),今天我们进一步深入的了解Scrapy爬虫项目创建,这里以伯乐在线网站的所有文章页为例进行说明. 在我们创建好Scrap ...

  9. 【scrapy爬虫】了解Scrapy+爬虫豆瓣电影Top250信息

    Scrapy爬虫框架 scrapy是什么 它是一个快速功能强大的开源网络爬虫框架 Github地址:https://github.com/scrapy/scrapy 官网地址:https://scra ...

最新文章

  1. Linux上oracle的安装
  2. 设计一个名为complex的类来表示复数_天线波束设计
  3. Codeforces 524E Rooks and Rectangles 线段树
  4. 4月24日Serverless Developer Meetup上海亮相
  5. [ BZOJ 4668 ] 冷战
  6. 曼彻斯特编码_两种编码方式以及两种帧结构
  7. 七日Python之路--第八天(一些琐碎)
  8. java之struts2之类型转换
  9. HTML黑客帝国代码雨
  10. sql里的正则表达式
  11. react18新特性
  12. jquery选择器篇
  13. 新浪微博开发平台基于php的sdk包(包含demo程序),新浪微博API开发简介之用户授权(PHP基础篇)_PHP教程...
  14. GNU GRUB 2.02系统启动项管理设置
  15. 动态规划-背包问题(1)
  16. 第七周作业--任务分解
  17. CC2530入网流程
  18. 机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾
  19. Markdown极简教程
  20. (转)阿里巴巴分布式服务框架 Dubbo 团队成员梁飞专访

热门文章

  1. kali 安装netspeed 网络流量监视器
  2. 【转载】CSDI2018广州关于《Nginx》的分享(附文字速录与PPT)
  3. 好书推荐 -- 《智能时代》-- 吴军(著)
  4. Netty系列进阶篇一:阻塞和多路复用到底是个啥?
  5. Windows系统下布置Redis服务器
  6. 安卓学习 Day26:使用自定义视图绘制文本、图像与图形
  7. Mac苹果移动硬盘数据丢失怎么恢复?
  8. java拼图游戏(带文档资料)
  9. 生鲜配送系统有哪些功能?搭建生鲜配送系统有哪些好处?
  10. 微信小程序如何隐藏右上角分享按钮