如何用python爬取js动态生成内容的页面

JavaScript026

如何用python爬取js动态生成内容的页面,第1张

抓取js动态生成的内容的页面有两种基本的解决方案

1用dryscrape库动态抓取页面

js脚本是通过浏览器来执行并返回信息的,所以,抓取js执行后的页面,一个最直接的方式就是用python模拟浏览器的行为。WebKit 是一个开源的浏览器引擎,python提供了许多库可以调用这个引擎,dryscrape便是其中之一,它调用webkit引擎来处理包含js等的网页!

2 selenium web测试框架

selenium是一个web测试框架,它允许调用本地的浏览器引擎发送网页请求,所以,它同样可以实现抓取页面的要求。

这个方法只是获取页面源码;你的要求是获取DOM结构;

有一个方式,使用lxml库,先使用selenium获取整个html的DOM,再把Dom转存到lxml对象,这样的方式可以获取到正html Dom tree,下面例子:

def parse_from_unicode(unicode_str): #html DOM tree to lxml 格式

utf8_parser = lxml.etree.HTMLParser(encoding='utf-8')

s = unicode_str.encode('utf-8')

return lxml.etree.fromstring(s, parser=utf8_parser)

def parse(request):

driver = webdriver.PhantomJS()

html =driver.find_element_by_name('html')

lxml_html=parse_from_unicode(html)

kk=lxml_html.xpath('//tr') #使用xpath匹配

对于这种动态加载的网站,建议使用第三方库selenium爬取。

它可以完全模拟浏览器,等待网站全部加载完成后再进行数据的自动获取。

对于主流的ChromeDriver、InternetExplorerDriver、FirefoxDriver、OperaDriver都支持,网站上的元素也支持多种选择器,如class、id、xpath等。

但是用习惯以后,对于这种非纯静态页面,离开selenium感觉就完全不会爬虫了。