普通的網(wǎng)絡數(shù)據(jù)可使用get或post方法來采集得到辣垒,而有些網(wǎng)站源代碼只能通過審查元素的方式才可以看到嫂伞,本文介紹如何使用Python代碼實現(xiàn)審查元素的網(wǎng)絡數(shù)據(jù)采集方法您访。
使用Python實現(xiàn)通過審查元素采集數(shù)據(jù)需要用到selenium庫季二,具體實現(xiàn)步驟如下:
-
官網(wǎng)下載selenium并安裝狐粱,編寫Python測試腳本伞剑。
from selenium import webdriver browser = webdriver.Firefox(); browser.get("http://www.baidu.com");
-
運行腳本報以下錯誤:
WebDriverException: Message: ‘geckodriver‘ executable needs to be in PATH.
是因為 selenium 3.x開始斑唬,webdriver/firefox/webdriver.py的init中,executable_path="geckodriver"黎泣;并且firefox 47以上版本恕刘,需要下載第三方driver,即geckodriver聘裁。
下載對應版本的瀏覽器驅(qū)動geckodriver雪营,解壓后將geckodriver.exe放置到firefox安裝目錄,并將該目錄寫入“環(huán)境變量-系統(tǒng)變量-Path”中衡便。
-
再次運行腳本可能會報以下錯誤:
WebDriverException: Message: Unable to find a matching set of capabilities
首先献起,檢查本機java版本,selenium3.x只支持java8版本以上镣陕;其次谴餐,檢查firefox瀏覽器版本,將firefox47卸載呆抑,安裝最新版本的firefox版本57岂嗓。兩者無誤后,即可成功鹊碍,親測有效厌殉。
-
運行腳本無報錯后食绿,可寫采集網(wǎng)絡數(shù)據(jù)的代碼,如下所示公罕。
# -*- coding:utf-8 -*- from bs4 import BeautifulSoup from selenium import webdriver import re,requests,sys,json,random,time import os chromedriver = "D:\Program Files\Mozilla Firefox\geckodriver" driver = webdriver.Firefox(executable_path = chromedriver) totelPage = 200 page = 1 head = 'http://apps.webofknowledge.com' f = open('WOS_file.csv','w') while page <= totelPage: print "Page %i ..." % ( page ) url = 'http://apps.webofknowledge.com/summary.do?product=WOS&parentProduct=WOS&search_mode=GeneralSearch&parentQid=&qid=1&SID=U2NEeEDm3nTK7peYwWt&&update_back2search_link_param=yes&page=' + str(page) driver.get(url) try: sourcePage = driver.page_source soup = BeautifulSoup(sourcePage,"html.parser") urls = soup.find_all("a", class_="smallV110", href=re.compile("full_record.do"),attrs={"tabindex":"0"}) print(len(urls)) for r_url in urls: list_url = head + str(r_url.attrs['href']) f.writelines(list_url + '\n') finally: pass time.sleep(random.randint(5,10)/10.0) page += 1 driver.quit() print "done..." f.close()
本例中主要使用了兩個用于采集的第三方庫webdriver和BeautifulSoup器紧。其中,driver.page_source用于獲取審查元素的網(wǎng)頁源代碼楼眷;BeautifulSoup(sourcePage,"html.parser")將網(wǎng)頁源代碼梳理成網(wǎng)格铲汪;BeautifulSoup中的find_all方法用于查詢匹配信息。這也是網(wǎng)絡數(shù)據(jù)采集常用庫和方法罐柳,兩個庫的API可參考官方手冊或相關博文掌腰,在此不贅述。