【新手任務】
老板:我們做海外市場的,搞定投資商很重要。你去把境外投資企業(機構)全部給我復制下來。
任務.png
總共2606頁,點下一頁,然后再ctrl+C,然后Ctrl+V,准備着復制到天亮吧。掃視一圈,新來的實習生都回學校做畢業論文了。
【解決方案】
知識點:Python 3 基本語法,splinter庫和xpath基本知識
Case 1:
python利用splinter庫,控制chrome瀏覽器,打開網頁,獲取數據。抓取境外投資企業(機構)名錄。
分析思路:
Step 1: 安裝splinter
百度 splinter 安裝,建議安裝anaconda(python常用庫就基本有了),再安裝splinter
Step 2: 利用splinter打開chrome,訪問鏈接
from splinter import Browser browser = Browser('chrome') #打開谷歌瀏覽器 browser.visit('http://femhzs.mofcom.gov.cn/fecpmvc/pages/fem/CorpJWList.html') #訪問鏈接
打開谷歌瀏覽器,訪問鏈接.png
Step 3: 獲取信息
- 在網頁空白處,點擊右鍵,選擇“檢查”。然后,在出現的功能框中,用鼠標點擊選擇元素
檢查.png -
點擊了選擇元素之后,按鈕變為藍色(我是色盲,也是許是藍色吧)。然后,所鼠標移動到網頁上,你要獲取獲取的信息上,然后單擊。
選擇要復制的數據.png -
然后,將鼠標移動到功能框中,你需要獲取的信息上,然后點擊右鍵-復制-XPath。這樣就獲得了該元素在網頁中的地址。
復制XPath.png - 代碼如下:
# 通過谷歌瀏覽器的檢查功能,可以很迅速地獲取所需元素的地址。 # find_by_xpath(XPath地址) 返回值是儲存在列表中的 # 這里是只有一個元素的列表,所以要選擇列表第一個元素的值 r1c1=browser.find_by_xpath('//*[@id="foreach"]/td[1]').first.value # 取得1行1列的值 r1c2=browser.find_by_xpath('//*[@id="foreach"]/td[2]').first.value # 取得1行2列的值 r1c3=browser.find_by_xpath('//*[@id="foreach"]/td[3]').first.value# 取得1行3列的值 browser.find_by_xpath('//*[@id="pageNoLink_0"]').first.click() # 點擊下一頁 # 打印數據,並退出瀏覽器 print(r1c1,r1c2,r1c3) browser.quit()
【結語】
本文簡單地講述了如何利用python splinter庫,操作谷歌瀏覽器,然后定位到所需的元素,然后獲取元素的值。獲取完畢后,將數據打印,並退出瀏覽器。關於數據的儲存,請參考插上翅膀,讓Excel飛起來——xlwings(一)。完整幾百頁數據的獲取,就只是在代碼上加一個循環,如有需要下次再細講。完整代碼如下:
from splinter import Browser browser = Browser('chrome') browser.visit('http://femhzs.mofcom.gov.cn/fecpmvc/pages/fem/CorpJWList.html') r1c1=browser.find_by_xpath('//*[@id="foreach"]/td[1]').first.value r1c2=browser.find_by_xpath('//*[@id="foreach"]/td[2]').first.value r1c3=browser.find_by_xpath('//*[@id="foreach"]/td[3]').first.value browser.find_by_xpath('//*[@id="pageNoLink_0"]').first.click() # 打印數據,並退出瀏覽器 print(r1c1,r1c2,r1c3) browser.quit()
參考資料
Xpath實例
splinter官方文檔
作者:筆鄰90s
鏈接:https://www.jianshu.com/p/6ec0c4ac620a
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
