美團商家信息採集神器

在github上找到一個美團的項目,能夠獲取指定城市的商戶信息,分分鐘幾百個商戶信息的數據就到手裏,信息中包含商店名、地理位置、評分、銷量、telephone(這個是重點)。
css

很久沒有更新了,今天寫文章的同時附上這個頗有價值的項目下載地址。html

本文是本身寫的xpath筆記,你們不想看能夠直接翻到文章最下面代碼下載地址。python

項目很惋惜是用是scrapy寫的,其實我不肯意用框架,可是爲了將這個項目改爲能運行的代碼,耗費了一天時間。在改動過程當中又從新熟悉了scrapy。決定仍是學學xpath,之後動手用scrapy寫幾個爬蟲。git

scrapy的選擇器除了css,就屬xpath比較好用。如今須要練習下xpath的使用。github

Xpath簡介
web

通常來講,使用id、name、class等屬性就能對節點進行定位就能解決絕大部分解析需求,但有時候遇到如下狀況,使用Xpath就更方便:面試

  1. 沒有id、name、class等api

  2. 標籤的屬性或者文本特徵不顯著微信

  3. 標籤嵌套層次太複雜框架

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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索