Spider_基础总结6--动态网页抓取--selenium
# 有些网站使用 ‘检查元素’也不能够好使,它们会对地址进行加密,此时使用Selenium 调用浏览器渲染引擎可以模拟用户的操作,完成抓取:
# 注:selenium既可以抓取静态网页也可以抓取动态网页。
# selenium的安装及 webdriver的安装见之前发的selenium专题博客。
# 首先补充点 CSS selector的知识:https://blog.csdn.net/hou_angela/article/details/80519718
from selenium import webdriver
browser = webdriver.Firefox(executable_path = r'C:\Users\12078\Desktop\geckodriver-v0.26.0-win64\geckodriver.exe')
browser.get("http://www.santostang.com/2018/07/04/hello-world/")
browser.maximize_window()
browser.page_source # 获取网页源代码
# 当有 frame 存在时:
from selenium import webdriver
browser = webdriver.Firefox(executable_path = r'C:\Users\12078\Desktop\geckodriver-v0.26.0-win64\geckodriver.exe')
browser.get("http://www.santostang.com/2018/07/04/hello-world/")
browser.maximize_window()
print("--进入 frame--")
browser.switch_to.frame(browser.find_element_by_css_selector("iframe[title='livere']"))
# content=browser.find_element_by_css_selector('div.reply-content').find_element_by_tag_name('p')
#【根据className属性定位(注意class属性使用.)】
# 或者使用后代选择器:
content=browser.find_element_by_css_selector('div p')
print (content.text)
# 爬取 http://www.santostang.com/2018/07/04/hello-world/ 页面的所有的评论。
# 没有成功,垃圾教程。
from selenium import webdriver
import time
browser = webdriver.Firefox(executable_path = r'C:\Users\12078\Desktop\geckodriver-v0.26.0-win64\geckodriver.exe')
browser.implicitly_wait(20) # 隐性等待,最长等20秒
browser.get("http://www.santostang.com/2018/07/04/hello-world/")
time.sleep(5)
for i in range(0,3):
# 下滑到页面底部
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 转换iframe,再找到查看更多,点击
browser.switch_to.frame(browser.find_element_by_css_selector("iframe[title='livere']"))
load_more = browser.find_element_by_css_selector('button.more-btn')
load_more.click()
# 把iframe又转回去
browser.switch_to.default_content()
time.sleep(2)
browser.switch_to.frame(browser.find_element_by_css_selector("iframe[title='livere']"))
comments = browser.find_elements_by_css_selector('div.reply-content')
for eachcomment in comments:
content = eachcomment.find_element_by_tag_name('p')
print (content.text)
# Selenium的高级操作:
# 有一些方法可以用Selenium控制浏览器的加载的内容,从而加快Selenium的爬取速度。常用的方法有:
# 1. 控制CSS的加载
因为抓取过程中仅仅抓取页面的内容,CSS样式文件是用来控制页面的外观和元素放置位置的,对内容并没有影响,所以我们可以限制网页加载CSS,从而减少抓取时间
# 2. 控制图片文件的显示
# 3. 禁用 flash
# 4. 控制JavaScript的执行
from selenium import webdriver
# 禁用css
fp = webdriver.FirefoxProfile()
fp.set_preference("permissions.default.stylesheet",2) # 某些firefox只需要这个
fp.set_preference('browser.migration.version', 9001) # 部分需要加上这个
# 禁用图片
fp.set_preference("permissions.default.image",2)
# 禁用flash
fp.set_preference('dom.ipc.plugins.enabled.libflashplayer.so', 'false')
# 禁用js
fp.set_preference("javascript.enabled", False)
browser = webdriver.Firefox(executable_path = r'C:\Users\12078\Desktop\geckodriver-v0.26.0-win64\geckodriver.exe',firefox_profile=fp)
browser.get("http://www.santostang.com/2018/07/04/hello-world/")
browser.maximize_window()
print("end")
Spider_基础总结6--动态网页抓取--selenium的更多相关文章
- Spider_基础总结5--动态网页抓取--元素审查--json--字典
# 静态网页在浏览器中展示的内容都在HTML的源码中,但主流网页使用 Javascript时,很多内容不出现在HTML的源代码中,此时仍然使用 # requests+beautifulsoup是不能够 ...
- Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取
区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...
- python网络爬虫-动态网页抓取(五)
动态抓取的实例 在开始爬虫之前,我们需要了解一下Ajax(异步请求).它的价值在于在与后台进行少量的数据交换就可以使网页实现异步更新. 如果使用Ajax加载的动态网页抓取,有两种方法: 通过浏览器审查 ...
- 面向初学者的Python爬虫程序教程之动态网页抓取
目的是对所有注释进行爬网. 下面列出了已爬网链接.如果您使用AJAX加载动态网页,则有两种方式对其进行爬网. 分别介绍了两种方法:(如果对代码有任何疑问,请提出改进建议)解析真实地址爬网示例是参考链接 ...
- java+phantomjs实现动态网页抓取
1.下载地址:http://phantomjs.org/download.html 2.java代码 public void getHtml(String url) { HTML="&quo ...
- Spider--动态网页抓取--审查元素
# 静态网页在浏览器中展示的内容都在HTML的源码中,但主流网页使用 Javascript时,很多内容不出现在HTML的源代码中,我们需要使用动态网页抓取技术. # Ajax: Asynchronou ...
- 动态网页爬取例子(WebCollector+selenium+phantomjs)
目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test" ...
- Python爬虫之三种网页抓取方法性能比较
下面我们将介绍三种抓取网页数据的方法,首先是正则表达式,然后是流行的 BeautifulSoup 模块,最后是强大的 lxml 模块. 1. 正则表达式 如果你对正则表达式还不熟悉,或是需要一些提 ...
- Python之HTML的解析(网页抓取一)
http://blog.csdn.net/my2010sam/article/details/14526223 --------------------- 对html的解析是网页抓取的基础,分析抓取的 ...
随机推荐
- 【MySQL Errors】Table 'xxx' is marked as crashed and should be repaired 的解决方案
现象描述 访问 Zabbix Web,出现如下错误提示: • Error in query [SELECT * FROM history_uint h WHERE h.itemid='25067' O ...
- Oracle 存储过程解锁及表解锁和停止执行
查看进程: select * from v$process; 根据存储过程名称查找是否被锁: select * FROM dba_ddl_locks where name =upper('sp_1') ...
- 【xenomai内核解析】系列文章大纲
xenomai内核解析 本博客为本人学习linux实时操作系统框架xenomai的一些记录,主要剖析xenomai内核实现,以及与linux相关的知识.方便读者定位具体文章,现列出本博客大纲,后续会陆 ...
- rabbitmq 延时队列
前言 某个产品 或者订单,有个有效期 过了有效期要取消 方法一 : 写个脚本,用crontab 定时扫描 改变状态 但是最低只能一分钟 ,不适合 方法二 : 用swoole得毫秒定时器,每秒钟去扫描表 ...
- spring boot:用itextpdf处理pdf表格文件(spring boot 2.3.2)
一,什么是itextpdf? 1,itextpdf的用途 itextpdf是用来生成PDF文档的一个java类库, 通过iText可以生成PDF文档, 还可以把XML/Html文件转化为PDF文件 2 ...
- centos8上添加sudoer用户
一,检查服务器是否已安装sudo的rpm包? 1,查询rpm包列表 [root@yjweb ~]# rpm -qa | grep sudo libsss_sudo-2.0.0-43.el8_0.3.x ...
- linux硬盘分区及挂载
今天买的一台服务器发现其硬盘容量与购买界面的描述不符,于是我去问了客服才知道有一块硬盘需要自己挂载,所以记录自己硬盘分区以及挂载操作得此文. 测试环境 由于时间限制,本人仅在centos 8下测试 ...
- 自定义Jackson2HttpMessageConverter,适应.html后缀url
Jackson2HttpMessageConverter 用处 SpringMVC中,controller中的方法返回java Bean对象,mvc将此对象转换成字符串 默认支持的mediaType: ...
- windows下nginx中配置端口转发 ----本文来自转载
什么是端口转发 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 转载原文链接:https://www.cnblogs.com/chanshuyi/ ...
- zookeeper在Dubbo中角色与作用
作者:倪炜链接:http://www.zhihu.com/question/25070185/answer/86166486来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处 ...