Crawler - PhantomJS

目录

1、PhantomJS安装

2、案例

示例一:Selenium+PhantomJS示例代码

示例二: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()
 

猜你喜欢

转载自blog.csdn.net/helunqu2017/article/details/112756570