上一篇文章爬取动态网页python+selenium+webdriver介绍了爬取动态网站的一种模拟浏览器的方法,该方法的优劣也很明显

优:

可以模拟任何人的操作,输入账号密码,点击登录等等操作

劣:

1.每次执行都要打开桌面上的Chrome浏览器(自动化测试需要)

2.浏览器的各个操作步骤都需要sleep几秒进行等待,效率低

本文针对两个劣点的进行解决

PhantomJS

webdriver有很多种类的浏览器比如Internet Explorer、Chrome和 Firefox等,PhantomJS是一个无界面的浏览器,可以解决第一个问题。

渲染的问题

一个含有 JS 渲染的网页。想要抓取网页中所有信息。如果我们利用 HTTP 方法无法获得任何信息。

import requests

from lxml import html

# storing response

response = requests.get('http://pycoders.com/archive')

# creating lxml tree from response body

tree = html.fromstring(response.text)

# Finding all anchor tags in response

print tree.xpath('//div[@class="campaign"]/a/@href')

因为这是动态渲染的网站,我们只能拿到一堆还没被解析为html的js代码。

Web kit

什么是 Web kit呢?

Web kit 可以实现浏览器所能处理的任何事情。对于某些浏览器来说,Web kit就是其底层的网页渲染工具。

Web kit 是 QT 库的一部分,因此需要安装 QT 和PyQT4 库来使用Web kit

sudo apt-get install python-qt4

注意:

上篇文章中使用selenium+webdriver其实也是通过浏览器来进行渲染那些js,原理相同

解析数据

思路:我们首先通过 Web kit 发送请求信息,然后等待网页被完全加载后将其赋值到某个变量中。接下来我们利用 lxml 从 HTML 数据中提取出有效的信息。

1.类 Render 可以用来渲染网页,当我们新建一个 Render 类时,它可以将 url 中的所有信息加载下来并存到一个新的框架中。

import sys

from PyQt4.QtGui import *

from PyQt4.Qtcore import *

from PyQt4.QtWebKit import *

class Render(QWebPage):

def __init__(self, url):

self.app = QApplication(sys.argv)

QWebPage.__init__(self)

self.loadFinished.connect(self._loadFinished)

self.mainFrame().load(QUrl(url))

self.app.exec_()

def _loadFinished(self, result):

self.frame = self.mainFrame()

self.app.quit()

2.利用以上的代码我们将 HTML 结果储存到变量 result 中

url = 'http://pycoders.com/archive/'

# This does the magic.Loads everything

r = Render(url)

# Result is a QString.

result = r.frame.toHtml()

3.转换数据格式并解析

# QString should be converted to string before processed by lxml

formatted_result = str(result.toAscii())

# Next build lxml tree from formatted_result

tree = html.fromstring(formatted_result)

# Now using correct Xpath we are fetching URL of archives

archive_links = tree.xpath('//div[@class="campaign"]/a/@href')

print archive_links

总结

1.动态网站爬取核心步骤是渲染js

2.python+selenium+webdriver方式是模拟出真实环境解决的,既可以解决渲染,又可以附带很多人的操作(输入、点击、最大化等),功能强大但是纯采集的话效率略低

3.python+Web kit方式直接把渲染的核心部件拿出来进行解决,这种方式简单直接,作为纯采集来说是首选,但是受限于需要登录验证的网站

python动态页面元素爬取_爬取动态网页python+Web kit相关推荐

  1. webmagic ajax,webmagic爬虫对静态页面,动态页面及js请求方式爬取的处理

    webmagic爬取网页数据,[分页爬取内容]见上一篇博文https://segmentfault.com/a/1190000020005655 webmagic的官方文档见: http://webm ...

  2. python动态页面元素爬取_python动态爬取网页

    简介 有时候,我们天真无邪的使用urllib库或Scrapy下载HTML网页时会发现,我们要提取的网页元素并不在我们下载到的HTML之中,尽管它们在浏览器里看起来唾手可得. 这说明我们想要的元素是在我 ...

  3. python翻页功能url不变_爬取Ajax动态加载和翻页时url不变的网页

    这两天投了一家公司的爬虫实习生,笔试题是完成一个爬虫的小需求.网站没有什么反爬的高级技巧.但是有非常常见的,并不是针对我们爬虫的,却让我们新手很难理解的ajax动态加载技术和乍一看不明白的翻页时不变的 ...

  4. Scrapy爬取动态页面下载图片(以抓取360图片为例)

    当我们想要抓取一个页面的内容时,要做的第一件事不是写代码,而是分析页面,确定这是一个静态页面还是动态页面.抓取静态页面的方法十分简单,直接解析html源码再进行分析解析即可,如果不太明白,可以参考我上 ...

  5. python爬股票信息_爬取股票信息(股票代码+价格)

    用到的两个网站分别东方财富网和老虎社区 思路为先从东方财富网获取股票列表,列表包含所有的股票名称和代码.然后再根据股票代码从老虎社区获取到个股的价格信息. 直接上代码: import requests ...

  6. python怎么爬虎牙_手把手教你利用Python爬取虎牙平台数据

    首先打开我们所需要爬取的网站,这里我们挑选的是虎牙直播. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道 ...

  7. webscraper多页爬取_爬虫工具实战篇(Web Scraper)- 京东商品信息爬取(原创)

    一.背景与目的 数字化营销时代,快速掌握了解数据是一项基本技能,本文主要讲解里面Web Scraper工具如何爬取公开数据,比如爬取京东的店铺售卖商品情况数据,以便我们更好地了解竞品对手的产品情况和定 ...

  8. 如何用python爬新闻_干货:如何利用 Python 爬虫实现群发新闻早报?(详细)

    1. 场景 经常有小伙伴在交流群问我,每天的早报新闻是怎么获取的? 其实,早期使用的方案,是利用爬虫获取到一些新闻网站的标题,然后做了一些简单的数据清洗,最后利用 itchat 发送到指定的社群中. ...

  9. php微信支付参数动态配置,支付,微信开发_微信支付动态如何获取$jsApiParameters参数,支付,微信开发 - phpStudy...

    微信支付动态如何获取$jsApiParameters参数 现在我们在做一个需要动态变换价格的微信支付页面,就是用户购买商品后,跳转到支付页面,但是可以选择几个不同的价格当中一个进行支付. 当跳到这个页 ...

最新文章

  1. C#编程语言与面向对象——继承
  2. 【Flutter】Flutter 布局组件 ( FractionallySizedBox 组件 | Stack 布局组件 | Positioned 组件 )
  3. IDEA工具创建项目并提交码云和一些基本使用
  4. 我所理解的RESTful Web API [设计篇]
  5. python请输入_不断提示用户输入Python
  6. 普及几个小常识,新手技能补充
  7. Android6 0权限机制(一):介绍
  8. centOS安装Ftp
  9. UWP开发细节记录:判断文件类型
  10. Cisco交换机上的链路聚合
  11. Redis 笔记之 Java 操作 Redis(Jedis)
  12. 解决办法:更新linux时候提示“由于没有公钥,无法验证下列签名 ***”
  13. PHP+Mysql高并发解决方案
  14. matlab圆形数据集,Matlab处理SPEI全球数据集
  15. 计算机网络分层协议及各层功能
  16. 服务器安全-避免被攻击者查到服务器源 IP与对攻击者ID信息收集
  17. 磨金石教育摄影技能干货分享|那些酷炫的照片是怎么拍出来的?
  18. Bugzilla详解
  19. 在家用电饼铛自制潮汕美食肠粉过程,想学的赶紧来看
  20. 进阶博弈论 Advanced Game Theory (Stanford+UBC)学习笔记

热门文章

  1. python eval函数格式_Python函数中eval函数知识点
  2. 贴花纸怎么贴_陶瓷贴花纸DIY怎么做?
  3. idea2019配置gradle详解_Constraint Layout 2.0 用法详解
  4. matlab trendsurface,MATLAB 添加新的预测性维护产品
  5. mysql关于日期的函数_MySQL中关于日期函数汇总
  6. 反弹式木马原理_汽车避震器的原理与改装问题
  7. 带虚函数的类的sizeof分析
  8. MATLAB GUI如何创建Callback函数
  9. Volley学习总结
  10. 有效的单元测试--总结