目录
示例二:selenium+phantomjs爬取动态加载内容
1、PhantomJS安装
目前,最新版本selenium已不支持PhantomJS,且PhantomJS不再开发!可改用Headless chrome(或Firefox)
PhantomJS是一个基于webkit的JavaScript API,是*面的,可脚本编程的WebKit浏览器引擎。它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你可以在基于webkit浏览器做的事情,它都能做到。它不仅是个隐形的浏览器,提供了诸如CSS选择器、支持Web标准、DOM操作、JSON、HTML5、Canvas、SVG等,同时也提供了处理文件I/O的操作,从而使你可以向操作系统读写文件等。PhantomJS的用处可谓非常广泛,诸如前端*面自动化测试(需要结合Jasmin)、网络监测、网页截屏等。
PhantomJS官方地址:http://phantomjs.org/。
PhantomJS官方API:http://phantomjs.org/api/。
PhantomJS官方示例:http://phantomjs.org/examples/。
PhantomJS GitHub:https://github.com/ariya/phantomjs/。
PhantomJS官方下载地址为http://phantomjs.org/download,下载完成后放到自己喜欢的一个位置,然后进入bin文件夹,然后把这个路径添加到环境变量里面。
如果你配置了Scripts目录环境变量,可以将phantomjs.exe移到python文件夹下的Script中就可使用。
2、案例
示例一:Selenium+PhantomJS示例代码
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get('http://www.cnblogs.com/lizm166/p/8360388.html')
#获取网页源码
data = driver.page_source
print(data)
#获取元素的html源码
tableData = driver.find_elements_by_tag_name('tableData').get_attribute('innerHTML')
#获取元素的id值
tableI = driver.find_elements_by_tag_name('tableData').get_attribute('id')
#获取元素的文本内容
tableI = driver.find_elements_by_tag_name('tableData').text
driver.quit()
示例二:selenium+phantomjs爬取动态加载内容
由于网站使用js动态加载的,所以没法获取Xpath,就没法通过点击页面元素来实现了。使用selenium+phantomjs来进行*面抓取。
import requests
from bs4 import BeautifulSoup
import re
from selenium import webdriver
import time
def getHTMLText(url):
##如果不方便配置环境变量。就使用phantomjs的绝对路径也可以
driver = webdriver.PhantomJS(executable_path='D:\\phantomjs-2.1.1-windows\\bin\\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()