Python网络爬虫——动态内容

很多网站都在其重要功能中依赖JavaScript,和单页面应用的简单事件不同,使用JavaScript时,不再是加载后立即喜爱在所有页面内容。这样就会造成许多网页在浏览器中显示的内容不会再HTML源码中。
什么是AJAX?
AJAX是指异步JavaScript和XML,描述了一种跨浏览器动态生成Web应用内容的功能。

动态网页示例

访问http://example.webscraping.com/search的搜索表单,
这里写图片描述
产看网页元素,发现结果被存储在ID为‘result’的div中。
这里写图片描述
尝试爬取这些结果会发现抽取结果时失败,在检查源代码时发现准备抓取的div元素实际上是空的。而Firebug显示给我们的却是当前的状态。

对动态网页进行逆向工程

要爬取数据,先要了解网页是如何加载该数据的,这个过程被称为逆向工程。在Firebug中单击Console选项卡,然后执行一次搜索,将会看到产生了一个AJAX请求。
这里写图片描述
也可以下载这个源代码从中抽取信息:

import string

from DownLoad import Downloader
import json


D=Downloader()
template_url='http://example.webscraping.com/places/ajax/search.json?&search_term={}&page_size=10&page={}'

countries=set()


for letter in string.lowercase:
    page=0
    while True:
        html=D(template_url.format(letter,page))
        try:
            ajax=json.loads(html)
        except ValueError as e:
            print e
            ajax=None
        else:
            for record in ajax['records']:
                countries.add(record['country'])
        page+=1
        if ajax is None or page>=ajax['num_pages']:
            break
    if letter=='c':
        break
    open('countries.txt','w').write('\n'.join(sorted(countries)))

##渲染动态网页 ##
对于搜索这个例子,可以很容易地对其运行过程实施逆向过程。但是有一些网站非常复杂,像Firebug这样的工具也很难理解。比如,一个网站使用Google Web Toolkit开发,那么它产生的JavaScript代码是机器生成的压缩版。我们可以使用浏览器渲染引擎,这种渲染引擎是浏览器在显示网页时解析HTML、应用CSS样式并执行JavaScript语句的部分。将使用WebKit渲染引擎,通过Qt框架可以获得该引擎的一个便捷窗口。
什么是Web.Kit?
WebKit的代码源于1998年的KHTML项目,当时它是
Konqueror浏览器的渲染引擎。2001年,苹果公司将该代码衍
生为WebKit,并应用于Safari浏览器。Google在Chrome27之前的版本也使用了WebKit内核,直到2013年转向利用WebKit开发的Blink内核。Opera在2003年到2012年使用的是其内部的Presto渲染引擎,之后切换到WebKit,但是不久又跟Chrome转向Blink.其他主流渲染引擎还包括IE使用的Trident和Firefox的Gecko.
PyQt和PySide
Qt框架有两种可以使用的Python库。

猜你喜欢

转载自blog.csdn.net/mashaokang1314/article/details/82260406
今日推荐