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

在上一篇文章(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 requests
from bs4 import BeautifulSoup
import re
from selenium import webdriver
import time

def 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_source

def fillUnivlist(html):
        soup = BeautifulSoup(html, 'html.parser')  # 用HTML解析网址
        tag = soup.find_all('div', attrs={'class': 'listInfo'})
        print(str(tag[0]))
        return 0

def main():
    url = 'http://sports.qq.com/articleList/rolls/' #要访问的网址
    html = getHTMLText(url) #获取HTML
    fillUnivlist(html)


if __name__ == '__main__':
    main()

然后对于js动态加载,可以用Python模拟请求(一般是get请求,把request headers都加上)。
具体方法是先按F12,打开网页审查元素界面,点击Network,如下图:

排除掉图片、gif、css等,要想找到你想要的网页,你只要尝试打开新的浏览器访问上面的url,然后就可以看到页面信息了,如果是你想要的信息就用request的get方法,把headers补充完整就就行了

请求的url一般很长,如上述图片的url地址是:
http://49.65.0.116/njzwfwrx/njbmfw/resources/oumanage/normal/cnsknowledgenormalread?rowguid=7c0c7a9c-81e5-4e6d-b2f5-fbf4d0492601&knowref=true&_dialogId_=2D9E2CA1-5A80-4ADB-A365-CE5F7B8A9849&_winid=w6228&_t=347563
其实只需保留rowguid就行了,即只需访问:
http://49.65.0.116/njzwfwrx/njbmfw/resources/oumanage/normal/cnsknowledgenormalread?rowguid=7c0c7a9c-81e5-4e6d-b2f5-fbf4d0492601
然后rowguid只需要通过query parameters就能拿到

 

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trisyp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值