python抓取动态网页(Python中有之前)
优采云 发布时间: 2021-10-27 21:19python抓取动态网页(Python中有之前)
很久以前,在学习Python web编程的时候,涉及到一个Python urllib。您可以使用 urllib.urlopen("url").read() 轻松读取页面上的静态信息。但是,随着时代的发展,越来越多的网页使用javascript、jQuery、PHP等语言来动态生成页面信息。因此,使用 urllib 抓取页面的 HTML 并不足以达到预期的效果。
解决方案:
动态分析页面信息有一个最简单的想法。Urllib 无法解析动态信息,但浏览器可以。浏览器上显示的处理信息实际上是经过处理的 HTML 文档。这为我们抓取动态页面信息提供了一个很好的思路。Python-PyQt 中有一个著名的图形库。虽然 PyQt 是一个图形库,但它在 QtWebkit 内部。这是非常实用的。谷歌的Chrome和苹果的Safari都是基于WebKit核心开发的,所以我们可以通过PyQt中的QtWebKit将页面中的信息读取加载成HTML文档,然后解析HTML文档,从HTML文档中提取我们想要的内容。信息。
所需材料:
作者本人使用的是 Mac OS X,Windows 和 Linux 平台应该使用相同的方法。
1、Qt4 库
图书馆,而不是创作者。Mac默认安装路径下的库应该是/home/username/Developor/,Qt4默认安装路径不要更改。否则,安装可能会失败。
官方网站:
2、SIP、PyQt4
这两个软件可以在PyQt官网找到。源代码已下载。Mac和Linux需要自己编译。
下载地址为:
切换到终端解压文件所在的目录。
在终端输入
蟒蛇配置.py
制作
须藤制作安装
安装和编译。
SIP 和 PyQt4 的安装方法是一样的。但是 PyQt4 依赖于 SIP。所以先安装SIP再安装PyQt4
1、2 两步完成后,安装Python的PyQt4模块。在 Python shell 中输入 import PyQt4 看看能不能找到 PyQt4 模块。
3、斯宾纳
spynner是一个QtWebKit客户端,可以模拟浏览器完成加载页面、触发事件、填写表单等操作。
这个模块可以在 Python 的官方网站上找到。
下载链接:
解压后cd到安装目录,然后输入sudo python configure.py install安装模块。
这样Spynner模块的安装就完成了。在 python shell 中尝试 import spynner 看看是否安装了模块。
Spynner的简单使用
Spynner的功能很强大,但是由于本人能力有限,下面介绍一下如何显示网页的源代码。
#! /usr/bin/python
#-*-coding: utf-8 -*-
import spynner
browser = spynner.Browser()
#创建一个浏览器对象
browser.hide()
#打开浏览器,并隐藏。
browser.load("http://www.baidu.com")
#browser 类中有一个类方法load,可以用webkit加载你想加载的页面信息。
#load(是你想要加载的网址的字符串形式)
print browser.html.encode("utf-8")
#browser 类中有一个成员是html,是页面进过处理后的源码的字符串.
#将其转码为UTF-8编码
open("Test.html", 'w+').write(browser.html.encode("utf-8"))
#你也可以将它写到文件中,用浏览器打开。
browser.close()
#关闭该浏览器
通过这个程序,你可以方便的显示webkit处理的页面的HTML源代码。
旋转应用程序
下面介绍一下spynner的简单应用。通过一个简单的程序,你就可以得到你在浏览器中看到的页面的所有图片。可以使用 HTMLParser、BeautifulSoup 等来解析 HTMLParser 文档。我选择 HTMParser。
#!/usr/bin/python
import spynner
import HTMLParser
import os
import urllib
class MyParser(HTMLParser.HTMLParser):
def handle_starttag(self, tag, attrs):
if tag == 'img':
url = dict(attrs)['src']
name = os.path.basename(dict(attrs)['src'])
if name.endswith('.jpg') or name.endswith('.png') or name.endswith('gif'):
print "Download.....", name
urllib.urlretrieve(url, name)
if __name__ == "__main__":
browser = spynner.Browser()
browser.show()
browser.load("http://www.artist.cn/snakewu1994/StyleBasis_Four/en_album_607236.shtml")
Parser = MyParser()
Parser.feed(browser.html)
print "Done"
browser.close()
通过这个程序,您可以下载您在页面上看到的所有图片。几行简单的程序就完成了这项艰巨的任务。实现图片的批量处理。这确实是Python语言的优势,所以就让繁重的任务交给第三方吧。