在github上找到一個美團的項目,能夠獲取指定城市的商戶信息,分分鐘幾百個商戶信息的數據就到手裏,信息中包含商店名、地理位置、評分、銷量、telephone(這個是重點)。
css
很久沒有更新了,今天寫文章的同時附上這個頗有價值的項目下載地址。html
本文是本身寫的xpath筆記,你們不想看能夠直接翻到文章最下面代碼下載地址。python
項目很惋惜是用是scrapy寫的,其實我不肯意用框架,可是爲了將這個項目改爲能運行的代碼,耗費了一天時間。在改動過程當中又從新熟悉了scrapy。決定仍是學學xpath,之後動手用scrapy寫幾個爬蟲。git
scrapy的選擇器除了css,就屬xpath比較好用。如今須要練習下xpath的使用。github
Xpath簡介
web
通常來講,使用id、name、class等屬性就能對節點進行定位就能解決絕大部分解析需求,但有時候遇到如下狀況,使用Xpath就更方便:面試
沒有id、name、class等api
標籤的屬性或者文本特徵不顯著微信
標籤嵌套層次太複雜框架
Xpath是XML Path的簡介,基於XML樹狀結構,能夠在整個樹中尋找鎖定目標節點。因爲HTML文檔自己就是一個標準的XML頁面,所以咱們可使用XPath的語法來定位頁面元素。
Xpath定位方法
1、Xpath路徑
符號 | 名稱 | 含義 |
---|---|---|
/ | 絕對路徑 | 表示從根節點開始選取 |
// | 相對路徑 | 表示選擇從任意位置的某個節點,而不考慮他們的位置 |
Xpath路徑案例
定位節點
#查找html下的body下的form下的全部input節點
/html/body/form/input
#查找全部input節點
//input
通配符*選擇未知的節點
#查找form節點下的全部節點
//form/*#查找全部節點//*
#查找全部input節點(input至少有爺爺輩親戚節點)
//*/input
2、使用索引(這是我本身理解)
若是篩選時元素時出現多個節點,但咱們想肯定惟一節點。可使用相似於列表索引的方式精肯定位。
案例
#定位 第8個td下的 第2個a節點
//*/td[7]/a[1]
#定位 第8個td下的 第3個span節點
//*/td[7]/span[2]
#定位 最後一個td下的 最後一個a節點
//*/td[last()]/a[last()]
3、使用屬性
爲了讓定位更精準,跟使用索引相似,咱們要增長信息量,那麼還可使用屬性。@符號是屬性符
#定位全部包含name屬性的input節點
//input[@name]
#定位含有屬性的全部的input節點
//input[@*]
#定位全部value=2的input節點
//input[@value='2']
#使用多個屬性定位
//input[@value='2'][@id='3']
或者//input[@value='2' and @id='3']
4、經常使用函數
除了索引、屬性外,Xpath還可使用便捷的函數來加強定位的準確性。下面試經常使用的幾個函數:
函數 | 含義 |
---|---|
contains(s1,s2) | 若是s1中包含s2,返回true;反之,返回false |
text() | 獲取節點中的文本內容 |
starts-with() | 從其實位置匹配字符串 |
<a class="menu_hot" href="/ads/auth/promote.html">應用推廣</a>
#定位href屬性中包含「promote.html」的全部a節點
//a[contains(@href,'promote.html')]
#元素內的文本爲「應用推廣」的全部a節點
//a[text()='應用推廣']
#href屬性值是以「/ads」開頭的全部a節點
//a[starts-with(@href,'/ads')]
5、Xpath軸
這部分相似BeautifulSoup中的sibling、parents、children方法。 有時候爲了實現定位,要拐彎抹角,七大姑八大姨遠房親戚繞來繞去就認識了,就定位到了。
軸名稱 | 含義 |
---|---|
ancestor | 選取當前節點的全部先輩(父、祖父等) |
ancestor-or-self | 選取當前節點的全部先輩(父、祖父等)及當前節點本身 |
attribute | 選取當前節點的全部屬性 |
child | 選取當前節點的全部子節點 |
descendant | 選取當前節點的全部後代子節點(子、孫等) |
descendant-or-self | 選取當前節點的全部後代子節點(子、孫等)及當前節點本身 |
following | 選取當前節點結束後的全部節點 |
parent | 選取當前節點的父節點 |
preceding-sibling | 選取當前節點以前的全部同級別節點 |
self | 選取當前節點 |
6、美團商戶信息
代碼裏我提供了一個高德api_key,可是若是你們用的多了,彼此實際上就沒法使用,建議你們本身申請一個。
#在高德註冊,進入控制檯 http://lbs.amap.com/
這是幾十秒中採集的鄭州市的數據。
tips:
修改高德api_key
在項目中找到settings,修改GAODEAPIKEY參數爲本身申請號的api_key。
更改城市
在項目中找到settings,修改CITY_NAME參數爲本身想要採集的城市
運行主程序採集數據
項目文件夾找到main.py運行就能夠愉快的獲取數據,保存到data.csv中。
項目下載地址
連接: https://pan.baidu.com/s/1kVGeM5x 密碼: e7dz
以爲有用就請大鄧喝杯咖啡
本文分享自微信公衆號 - 大鄧和他的Python(DaDengAndHisPython)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。