python + selenium + chromedriver 如何实现无界面爬取
问题描述
在使用selenium爬取12306的过程中,发现使用phantomjs无法爬取,使用chromedriver就可以,应该是phantomjs被网站检测出来后封禁了,使用chromedriver又会显示界面,爬取效率低。现在有两点疑问,google了好久都没找到有效的解决方法1.如何伪装phantomjs,尽最大可能的伪装2.如何设置chromedriver,使其不显示界面,或者还有什么其他方法提高爬取效率
感谢!!!
问题解答
回答1:通过PyVirtualDisplay可以实现你的需求,大概代码就是这样:
#!/usr/bin/env pythonfrom pyvirtualdisplay import Displayfrom selenium import webdriverdisplay = Display(visible=0, size=(800, 600))display.start()# now Firefox will run in a virtual display. # you will not see the browser.browser = webdriver.Chrome()browser.get(’http://www.baidu.com’)print browser.titlebrowser.quit()display.stop()
不知道你修改过phantomjs的头信息没有,可以通过
from selenium import webdriveroptions = webdriver.ChromeOptions()options.add_argument(’lang=zh_CN.UTF-8’)options.add_argument(’user-agent='Mozilla/5.0 (iPod; U; CPU iPhone OS 2_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F137 Safari/525.20'’)browser = webdriver.Chrome(chrome_options=options)url = 'https://baidu.com'browser.get(url)browser.quit()
这种方式修改phantomjs的头部信息,这个也可以试试
回答2:可以参考鄙人的文章在headless模式下运行selenium
相关文章:
1. mysql 查询身份证号字段值有效的数据2. python - 爬虫模拟登录后,爬取csdn后台文章列表遇到的问题3. mysql - 把一个表中的数据count更新到另一个表里?4. javascript - 弹出一个子窗口,操作之后关闭,主窗口会得到相应的响应,例如网站的某些登录界面,django后台的管理等,这是怎么实现的呢?5. 视频文件不能播放,怎么办?6. 请教使用PDO连接MSSQL数据库插入是乱码问题?7. mysql - 分库分表、分区、读写分离 这些都是用在什么场景下 ,会带来哪些效率或者其他方面的好处8. python bottle跑起来以后,定时执行的任务为什么每次都重复(多)执行一次?9. android - 分享到微信,如何快速转换成字节数组10. visual-studio - Python OpenCV: 奇怪的自动补全问题
