# 有些网站使用 ‘检查元素’也不能够好使,它们会对地址进行加密,此时使用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的更多相关文章

  1. Spider_基础总结5--动态网页抓取--元素审查--json--字典

    # 静态网页在浏览器中展示的内容都在HTML的源码中,但主流网页使用 Javascript时,很多内容不出现在HTML的源代码中,此时仍然使用 # requests+beautifulsoup是不能够 ...

  2. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  3. python网络爬虫-动态网页抓取(五)

    动态抓取的实例 在开始爬虫之前,我们需要了解一下Ajax(异步请求).它的价值在于在与后台进行少量的数据交换就可以使网页实现异步更新. 如果使用Ajax加载的动态网页抓取,有两种方法: 通过浏览器审查 ...

  4. 面向初学者的Python爬虫程序教程之动态网页抓取

    目的是对所有注释进行爬网. 下面列出了已爬网链接.如果您使用AJAX加载动态网页,则有两种方式对其进行爬网. 分别介绍了两种方法:(如果对代码有任何疑问,请提出改进建议)解析真实地址爬网示例是参考链接 ...

  5. java+phantomjs实现动态网页抓取

    1.下载地址:http://phantomjs.org/download.html 2.java代码 public void getHtml(String url) { HTML="&quo ...

  6. Spider--动态网页抓取--审查元素

    # 静态网页在浏览器中展示的内容都在HTML的源码中,但主流网页使用 Javascript时,很多内容不出现在HTML的源代码中,我们需要使用动态网页抓取技术. # Ajax: Asynchronou ...

  7. 动态网页爬取例子(WebCollector+selenium+phantomjs)

    目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test" ...

  8. Python爬虫之三种网页抓取方法性能比较

    下面我们将介绍三种抓取网页数据的方法,首先是正则表达式,然后是流行的 BeautifulSoup 模块,最后是强大的 lxml 模块. 1. 正则表达式   如果你对正则表达式还不熟悉,或是需要一些提 ...

  9. Python之HTML的解析(网页抓取一)

    http://blog.csdn.net/my2010sam/article/details/14526223 --------------------- 对html的解析是网页抓取的基础,分析抓取的 ...

随机推荐

  1. 《流畅的Python》第二部分 数据结构 【序列构成的数组】【字典和集合】【文本和字节序列】

    第二部分 数据结构 第2章 序列构成的数组 内置序列类型 序列类型 序列 特点 容器序列 list.tuple.collections.deque - 能存放不同类型的数据:- 存放的是任意类型的对象 ...

  2. JAVA对象头详解(含32位虚拟机与64位虚拟机)

    为什么要学习Java对象头 学习Java对象头主要是为了解synchronized底层原理,synchronized锁升级过程,Java并发编程等. JAVA对象头 由于Java面向对象的思想,在JV ...

  3. java中的t怎么用

    <T> T表示返回值是一个泛型,传递啥,就返回啥类型的数据,而单独的T就是表示限制你传递的参数类型,这个案例中,通过一个泛型的返回方式,获取每一个集合中的第一个数据, 通过返回值<T ...

  4. shell脚本算术运算

    自增自减操作 用let命令可以实现自增自减的命令,不需要$符号: #!/bin/bash set -e n=100 let n++ echo $n 还可以实现自增自减指定的值: #!/bin/bash ...

  5. 飞翔---------双重线性dp

    题目: 鹰最骄傲的就是翱翔,但是鹰们互相都很嫉妒别的鹰比自己飞的快,更嫉妒其他的鹰比自己飞行的有技巧.于是,他们决定举办一场比赛,比赛的地方将在一个迷宫之中. 这些鹰的起始点被设在一个N*M矩阵的左下 ...

  6. es 讲义

    链接: https://pan.baidu.com/s/193jObXs85OZcvAHDycUXlw 提取码: ewbp

  7. .net 添加打印 源代码

    <div style="margin-top: auto; text-align: center;" id="buttondiv"> <obj ...

  8. Fur 是 .NET 5 平台下企业应用开发最佳实践框架。

    Fur 是 .NET 5 平台下企业应用开发最佳实践框架. 立即尝鲜 Fur 是基于最新的 .NET 5 RC2 构建,目的是为了尽早体验新功能,对即将到来的 .NET 5 正式版做出最快的响应. 所 ...

  9. cgdb安装

    cgdb官网:http://cgdb.github.io/ 一.cgdb安装 可使用wget命令下载,wget  http://cgdb.me/files/cgdb-0.7.0.tar.gz 之后解压 ...

  10. int是java.lang包中可用的类的名称

    int是java.lang包中可用的类的名称(x) int为基本数据类型,不是类