Python无头爬虫下载文件的实现


Posted in Python onApril 02, 2020

有些页面并不能直接用requests获取到内容,会动态执行一些js代码生成内容。这个文章主要是对付那些特殊页面的,比如必须要进行js调用才能下载的情况。

安装chrome

wget [https://dl.google.com/linux/direct/google-chrome-stable\_current\_x86\_64.rpm](https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm)
yum install ./google-chrome-stable\_current\_x86\_64.rpm
yum install mesa-libOSMesa-devel gnu-free-sans-fonts wqy-zenhei-fonts

安装chromedriver

淘宝源(推荐)  

wget http://npm.taobao.org/mirrors/chromedriver/2.41/chromedriver_linux64.zip
unzip chromedriver\_linux64.zip
move chromedriver /usr/bin/
chmod +x /usr/bin/chromedriver

感谢这篇博客

上述步骤可以选择适合自己的版本下载,注意:chrome和chrome driver必须是匹配的版本,chrome driver会备注支持的chrome版本号。

实战操作

需要引入的库

from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import NoSuchElementException

chrome启动设置

chrome_options = Options()
chrome_options.add_argument('--no-sandbox')#解决DevToolsActivePort文件不存在的报错
chrome_options.add_argument('window-size=1920x3000') #指定浏览器分辨率
chrome_options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片, 提升速度
chrome_options.add_argument('--headless') #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败

同样感谢上面的博客

设置额外参数,比如下载不弹窗和默认下载路径

prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': './filelist'}
chrome_options.add_experimental_option('prefs', prefs)

初始化驱动

cls.driver=webdriver.Chrome(options=chrome_options)

退出驱动

cls.driver.quit()

请求一个url

cls.driver.get(url)

执行指定js代码

cls.driver.execute_script('console.log("helloworld")')

查找指定元素

subtitle = cls.driver.find_element_by_class_name("fubiaoti").text

到此这篇关于Python无头爬虫下载文件的实现的文章就介绍到这了,更多相关Python无头爬虫下载文件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python显示进度条的方法
Sep 20 Python
python编程开发之textwrap文本样式处理技巧
Nov 13 Python
Python中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
python 垃圾收集机制的实例详解
Aug 20 Python
利用pandas将numpy数组导出生成excel的实例
Jun 14 Python
python traceback捕获并打印异常的方法
Aug 31 Python
django用户登录验证的完整示例代码
Jul 21 Python
python解释器spython使用及原理解析
Aug 24 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
Python生成器常见问题及解决方案
Mar 21 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 Python
tensorboard 可视化之localhost:6006不显示的解决方案
May 22 Python
linux 下selenium chrome使用详解
Apr 02 #Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 #Python
python实现将range()函数生成的数字存储在一个列表中
Apr 02 #Python
Python 给下载文件显示进度条和下载时间的实现
Apr 02 #Python
python求前n个阶乘的和实例
Apr 02 #Python
python实现将字符串中的数字提取出来然后求和
Apr 02 #Python
python对指定字符串逆序的6种方法(小结)
Apr 02 #Python
You might like
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
深入理解php的MySQL连接类
2013/06/07 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
PHP数据库操作三:redis用法分析
2017/08/16 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
从面试题学习Javascript 面向对象(创建对象)
2012/03/30 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
AngularJS 最常用的功能汇总
2016/02/17 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
如何编写jquery插件
2017/03/29 jQuery
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
2020/11/17 Vue.js
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
解析Python中while true的使用
2015/10/13 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
本科毕业生的求职信范文
2013/11/20 职场文书
军神教学反思
2014/02/04 职场文书
函授药学自我鉴定
2014/02/07 职场文书
银行内勤岗位职责
2014/04/09 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
预备党员自我评价范文
2015/03/04 职场文书
2015大学生求职信范文
2015/03/20 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
遗失证明范文
2015/06/19 职场文书
Windows中Redis安装配置流程并实现远程访问功能
2021/06/07 Redis
Django实现drf搜索过滤和排序过滤
2021/06/21 Python
nginx七层负载均衡配置详解
2022/07/15 Servers