标签:
很多网站的内容是由JS动态生成的,对于这样的网站查看它的源代码是看不出什么的,常规的爬虫对于这样的网站束手无策。我自己做了一个由JS生成的图片,并成功的用Ghost.py把它爬取了下来。
对于这么个图片看似平常,那么看下它的源代码
从源代码里看不出关于这张图片的地址,而图片的地址是在后端,由JS加载进去的,爬取这类网站需要模拟浏览器执行JS语句,得到执行JS后的页面,再实现爬取。
这里需要用到一个工具:ghost.py
ghost.py是一个使用python编写的封装了webkit的网络工具。官网是:http://jeanphix.me/Ghost.py。
首先需要安装PyQt或者PySide,然后使用`pip`安装ghost.py:pip install ghost.py
获取网页内容已经相应的css、js、图片等资源:
from ghost import Ghost
ghost = Ghost()
page, resources = ghost.open(‘http://my.web.page‘)
该方法以元组的形式返回网页的主要资源(网页内容)和该网页需要加载的资源(比如CSS、js、图片等文件)。这些资源都被存储到HttpResource对象中。如果 print ghost.content 则会把JS执行后的页面给打印出来,从里面可以获取到图片的地址,从而实现爬取。
到了这里就可以实现爬取了
from ghost import Ghost
from bs4 import BeautifulSoup
import urllib2
url = ‘http://www.pyworm.com/jsimg/‘
ghost = Ghost(wait_timeout=120)
page, resources = ghost.open(url)
soup = BeautifulSoup(ghost.content)
img = soup.find_all([‘img‘])
imgurl = img[0].get(‘src‘)
print imgurl
data = urllib2.urlopen(imgurl).read()
with open(‘D:/Python/picture‘+‘/‘+‘jqxx.jpg‘,‘wb‘)as code:
code.write(data)
我只是用最简单的例子把爬取动态页面的思路搞清,具体的实际情况肯定比这复杂得多,ghost.py的功能也有很多,以后继续探索发现吧。
标签:
原文地址:http://www.cnblogs.com/pylab/p/4637846.html