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的解析是网页抓取的基础,分析抓取的 ...
随机推荐
- Go strconv包
strconv包 该包主要实现基本数据类型与其字符串表示的转换. 常用函数为Atoi().Itia().parse系列.format系列.append系列. 更多函数请查看官方文档. string与i ...
- 扩展、接管MVC都不会,还说会Spring Boot?
持续原创输出,点击上方蓝字关注我 目录 前言 Spring Boot 版本 如何扩展MVC? 如何自定义一个拦截器? 什么都不配置为什么依然能运行MVC相关的功能? 如何全面接管MVC?[不推荐] 为 ...
- [论文阅读笔记] GEMSEC,Graph Embedding with Self Clustering
[论文阅读笔记] GEMSEC: Graph Embedding with Self Clustering 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 已经有一些工作在使用学习 ...
- excel 无效引用 所引用的单元格不能位于256列
无效引用 该文件版本所包含的公式中,所引用的单元格不能位于256列(列IW 或更远)或 65536 行以外的区域. 原因及解决方法: 1.版本问题,把两文件都另存为一致的版本,改为后缀为xlsx. 2 ...
- python文件管道 下载图集
# -*- coding: utf-8 -*- import re from time import sleep import scrapy from scrapy.linkextractors im ...
- List<String>转换为实体类的属性【转】
package model; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arr ...
- JavaSE学习笔记04方法、数组
1.方法 java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 设计方法的原则:一个方法只完成1个功能,这样 ...
- Linux用户和组管理命令-用户属性修改usermod
用户属性修改 usermod 命令可以修改用户属性 格式: usermod [OPTION] login 常见选项: -u UID: 新UID -g GID: 新主组 -G GROUP1[,GROUP ...
- codeforces #271D Good Substrings
原题链接:http://codeforces.com/problemset/problem/271/D 题目原文: D. Good Substrings time limit per test 2 s ...
- java安全编码指南之:文件IO操作
目录 简介 创建文件的时候指定合适的权限 注意检查文件操作的返回值 删除使用过后的临时文件 释放不再被使用的资源 注意Buffer的安全性 注意 Process 的标准输入输出 InputStream ...