Python爬虫进阶(一)使用Selenium进行网页抓取
时间:2022-05-07
本文章向大家介绍Python爬虫进阶(一)使用Selenium进行网页抓取,主要内容包括1、使用Firefox实例、2、对Selenium的profile的配置、3、画图、问题:、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
1、使用Firefox实例
from selenium import webdriver
import time
firefox = webdriver.Firefox() #初始化Firefox浏览器
url = 'https://www.zhihu.com'
firefox.get(url) #调用get方法抓取
time.sleep(10) #10s用于观察
with open('zhihu.html','w',encoding='utf-8') as f:
f.write(firefox.page_source) #保存网页到本地
firefox.quit()
上图为调用Firefox获得的网页。使用page_source可以获得网页源代码,就和requests.get是一样的,不用加headers之类的。
2、对Selenium的profile的配置
简单说,就是使用selenium修改浏览器相关参数,让浏览器不加载JS、不加载图片,会提高很多速度。代码如下:
from selenium import webdriver
import time
firefox_profile = webdriver.FirefoxProfile()
firefox_profile.set_preference("permissions.default.stylesheet",2) #禁用样式表文件
firefox_profile.set_preference("permissions.default.image",2) #不加载图片
firefox_profile.set_preference("javascript.enabled",False) #禁止JS
firefox_profile.update_preferences() #更新设置
firefox = webdriver.Firefox(firefox_profile)
url = 'https://www.zhihu.com'
print("开始加载")
t_start = time.time()
firefox.get(url)
t_end = time.time()
print("加载时间是:",t_end-t_start)
time.sleep(10)
firefox.quit()
加载网页如下
firefox_profile.set_preference("permissions.default.stylesheet",1)
firefox_profile.set_preference("permissions.default.image",1)
firefox_profile.set_preference("javascript.enabled",True)
把2改为1,False改为True,看看
返回正常网页
4s与10s的差别,在爬取多网页就会有体现了。
注意,页面加载与实际网络环境有关。
3、画图
禁用JS,页面加载是否更快,可以在每种方式下运行相同的次数,然后取平均值来对比。
绘图使用matplotlib
from selenium import webdriver
import time
import matplotlib.pyplot as plt
def performance(n,css_val,image_val,js_val):
loading_time = []
for i in range(0,n):
firefox_profile = webdriver.FirefoxProfile()
firefox_profile.set_preference("permissions.default.stylesheet",css_val)
firefox_profile.set_preference("permissions.default.image",image_val)
firefox_profile.set_preference("javascript.enabled",js_val)
firefox_profile.update_preferences()
firefox = webdriver.Firefox(firefox_profile)
url = 'https://zhangslob.github.io/'
print("开始加载")
t_start = time.time()
firefox.get(url)
t_end = time.time()
print("加载时间是:",t_end-t_start)
loading_time.append(t_end-t_start)
print('=========================')
#time.sleep(10)
firefox.quit()
return [x for x in range(1,n+1)],loading_time
if __name__ == '__main__':
x1_lst,y1_lst = performance(10,1,1,True)
x2_lst,y2_lst = performance(10,2,2,False)
ava_y1 = sum(y1_lst)/len(x1_lst)
ava_y2 = sum(y2_lst)/len(x2_lst)
plt.title("Compare loading time")
plt.xlabel("Test number")
plt.ylabel("Loading time")
plt.plot(x1_lst,y1_lst,'go:',label=str(ava_y1))
plt.plot(x2_lst,y2_lst,'rs:',label=str(ava_y2))
plt.legend()
plt.show()
我把网址换成了我的博客:崔斯特的博客(zhangslob.github.io/),这样更符合实际。
绿色的线是正常网页,红色是修改后的
为了确保准确,换成别的网址测试一下,可是为什么会这样?
问题:
为什么禁用JS、不加载图片,时间和原来相比差别不大?
- 移除WordPress 仪表盘首页的“插件”“其它WordPress 新闻”小工具
- 解决VMware 7在Windows 7上无法上网的问题
- Windows Server 2008群集仲裁机制
- [C#2] 5-迭代器
- 服务器未能识别 HTTP 标头 SOAPAction 的值
- 实用代码-C#获取本机网络适配器信息及MAC地址
- WordPress 自定义 login (登录页面)CSS 样式
- [C#1] 12-特性
- HTTP Basic Authentication for RESTFul Service
- [C#2] 4-可空类型、静态类
- jquery 操作css 尺寸
- Windows 7上IIS出现http 500错误
- [C#2] 2-匿名方法
- jquery 操作css 选择器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Array - 209. Minimum Size Subarray Sum
- Array - 334. Increasing Triplet Subsequence
- Array - 123. Best Time to Buy and Sell Stock III
- Array - 122. Best Time to Buy and Sell Stock II
- Array - 121. Best Time to Buy and Sell Stock
- Array - 220. Contains Duplicate III
- Array - 219. Contains Duplicate II
- Array - 217. Contains Duplicate
- Array - 299. Bulls and Cows
- Array - 189. Rotate Array
- Array - 277 Find the Celebrity
- Array - 80. Remove Duplicates from Sorted Array II
- Array - 508. Wiggle Sort
- Array - 376. Wiggle Subsequence
- Array - 283. Move Zeroes