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的解析是网页抓取的基础,分析抓取的 ...
随机推荐
- 推荐一款IDEA神器!一键查看Java字节码以及其他类信息
由于后面要分享的一篇文章中用到了这篇文章要推荐的一个插件,所以这里分享一下.非常实用!你会爱上它的! 开始推荐 IDEA 字节码查看神器之前,先来回顾一下 Java 字节码是啥. 何为 Java 字节 ...
- 1T数据快速排序!十种经典排序算法总结
1 冒泡排序 每次循环都比较前后两个元素的大小,如果前者大于后者,则将两者进行交换.这样做会将每次循环中最大的元素替换到末尾,逐渐形成有序集合.将每次循环中的最大元素逐渐由队首转移到队尾的过程形似&q ...
- xpath教程-逐层检索和全局检索 转
逐层检索和全局检索 布啦豆 11203 本节主要介绍用xpath来描述html的层级关系 主要使用到的知识点如下: 单独的一个点 .,表示当前位置 两个点 ..,表示上一级父标签的位置 单独的一个 ...
- apache自带的ab测试失败请求原因
只要出现 Failed requests 就会多出现一行要求失败的各原因的数据统计,分别有 Connect, Length, 与 Exception 三种,分别代表的意义为:Connect ...
- BCE和CE交叉熵损失函数的区别
首先需要说明的是PyTorch里面的BCELoss和CrossEntropyLoss都是交叉熵,数学本质上是没有区别的,区别在于应用中的细节. BCE适用于0/1二分类,计算公式就是 " - ...
- Moment.js常见用法总结
Moment.js常见用法总结 Moment.js是一个轻量级的JavaScript时间库,它方便了日常开发中对时间的操作,提高了开发效率. 日常开发中,通常会对时间进行下面这几个操作:比如获取时 ...
- c++ 让你的应用支持相对路径
std::string GetCurrentExeDir(){ char szPath[1024] = { 0 };#ifdef WIN32 GetModuleFileName(NULL, szPat ...
- 联赛模拟测试25 C. Repulsed 贪心+树形DP
题目描述 分析 考虑自底向上贪心 \(f[x][k]\) 表示 \(x\) 下面距离为 \(k\) 的需要灭火器的房间数,\(g[x][k]\) 表示 \(x\) 下面距离为 \(k\) 的多余灭火器 ...
- 群晖DS218+部署kafka
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- drf 认证校验及源码分析
认证校验 认证校验是十分重要的,如用户如果不登陆就不能访问某些接口. 再比如用户不登陆就不能够对一个接口做哪些操作. drf中认证的写法流程如下: 1.写一个类,继承BaseAuthenticatio ...