python获取完整网页内容(即包括js动态加载的):selenium+phantomjs

  • A+
所属分类:Python

在上一篇文章(http://blog.csdn.net/Trisyp/article/details/78732630)中我们利用模拟打开浏览器的方法模拟点击网页中的加载更多来实现动态加载网页并获取网页内容。但是很不幸,有些网站的这部分内容是使用js动态加载的,我们用普通方法获取的时候,发现有些地方是空白的,所以没法获取Xpath,所以上篇文章方法也就失效了。
可能有些童鞋开始会认为是不是代码出错了,然后打印全部网页内容,发现想要的那部分内容确实没有,再用浏览器去访问网页,右键查看网页源代码发现这部分代码确实没有。我就是那个傻童鞋!!!
所以本篇文章就是希望能够解决这种问题,去抓取js动态加载的网页。首先想到的肯定是使用selenium来调用浏览器进行抓取,但是第一句就说明了,Xpath没法获取,所以就没法通过点击页面元素来实现了。这个时候看到了这篇文章(http://blog.csdn.net/yxwb1253587469/article/details/52233562),使用selenium+phantomjs来进行无界面抓取。
具体步骤如下:
1. 下载Phantomjs,下载地址:http://phantomjs.org/
2. 下完之后直接解压就OK了,然后selenium的安装用pip就行了
3. 写代码执行就完成了

完整代码如下:

import requestsfrom bs4 import BeautifulSoupimport refrom selenium import webdriverimport timedef getHTMLText(url):
        driver = webdriver.PhantomJS(executable_path='D:\\phantomjs-2.1.1-windows\\bin\\phantomjs')  # phantomjs的绝对路径        time.sleep(2)
        driver.get(url)  # 获取网页        time.sleep(2)        return driver.page_sourcedef fillUnivlist(html):
        soup = BeautifulSoup(html, 'html.parser')  # 用HTML解析网址        tag = soup.find_all('div', attrs={'class': 'listInfo'})
        print(str(tag[0]))        return 0def main():
    url = 'http://sports.qq.com/articleList/rolls/' #要访问的网址    html = getHTMLText(url) #获取HTML    fillUnivlist(html)if __name__ == '__main__':
    main()

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: