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的解析是网页抓取的基础,分析抓取的 ...
随机推荐
- Git操作常用的命令都在这里了。
创建仓库 git init 在当前目录执行,会生成 .git目录文件,这个和SVN一致. 提交到仓库 git commit -m "first commit" -m:表示提交描述, ...
- 学习WebDav
目录 前言 初识WebDav 有哪些支持webdav的网盘? WebDAV的特性和优势 服务端的搭建 调用WebDav接口 PROPFIND方法 PROPPATCH方法 MKCOL方法 PUT方法 G ...
- Oracle和MySql之间SQL区别(等效转换以及需要注意的问题)
本篇博文是Oracle和MySQL之间的等效SQL转换和不同,目前市面上没有转换两种SQL的工具,小编觉得以后也不一定会有,于是在业余时间整理了一下,如果有什么错误之处请留言告知,小编也是刚入门的小白 ...
- rs232转以太网
rs232转以太网 rs232转以太网ZLAN5103可以实现RS232/485/422和TCP/IP之间进行透明数据转发.方便地使得串口设备连接到以太网和Internet,实现串口设备的网络化升级. ...
- lumen laravel response对象返回数据
Route::get('home', function () { $content = "内容"; $status = 301; $value = 'text/html'; // ...
- Ubuntu18.04中安装virtualenv和virtualenvwrapper
1.安装virtualenv和virtualenvwrapper pip3 install virtualenv pip3 install virtualenvwrapper 2.创建目录用来存放虚拟 ...
- 第二十五章 ansible基础
一.Ansible概述 1.什么是Ansible Ansible是一个自动化统一配置管理工具,自动化主要体现在Ansible集成了丰富模块以及功能组件,可以通过一个命令完成一系列的操作,进而能减少重复 ...
- 第十二章 配置vlan
一.vlan技术简介 1.广播风暴 广播风暴(broadcast storm)简单的讲是指当广播数据充斥网络无法处理,并占用大量网络带宽,导致正常业务不能运行,甚至彻底瘫痪,这就发生了"广播 ...
- 实战:xfs文件系统的备份和恢复
概述 XFS提供了 xfsdump 和 xfsrestore 工具协助备份XFS文件系统中的数据.xfsdump 按inode顺序备份一个XFS文件系统. centos7选择xfs格式作为默认文件系统 ...
- Java实现:抛开jieba等工具,写HMM+维特比算法进行词性标注
一.前言:词性标注 二.经典维特比算法(Viterbi) 三.算法实现 四.完整代码 五.效果演示: 六.总结 一.前言:词性标注 词性标注(Part-Of-Speech tagging, POS t ...