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的Django框架中创建语言文件
Jul 27 Python
详解使用Python处理文件目录的相关方法
Oct 16 Python
python实现自动发送邮件
Jun 20 Python
在Python中实现shuffle给列表洗牌
Nov 08 Python
Python类装饰器实现方法详解
Dec 21 Python
Python的numpy库下的几个小函数的用法(小结)
Jul 12 Python
python判断一个对象是否可迭代的例子
Jul 22 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
Python三元运算与lambda表达式实例解析
Nov 30 Python
python 解决print数组/矩阵无法完整输出的问题
Feb 19 Python
使用Python打造一款间谍程序的流程分析
Feb 21 Python
Pycharm 解决自动格式化冲突的设置操作
Jan 15 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下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
PHP运行模式的深入理解
2013/06/03 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
PHP在网页中动态生成PDF文件详细教程
2014/07/05 PHP
初识PHP
2014/09/28 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
js注入 黑客之路必备!
2016/09/14 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
2018/08/17 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
2019/09/16 Javascript
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
python模拟事件触发机制详解
2018/01/19 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
10个Python小技巧你值得拥有
2018/09/29 Python
python导入模块交叉引用的方法
2019/01/19 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
学生会主席就职演讲稿
2014/01/14 职场文书
校园标语大全
2014/06/19 职场文书
大学同学会活动方案
2014/08/20 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书
七年级作文之英语老师
2019/10/28 职场文书
python实现语音常用度量方法的代码详解
2021/05/25 Python