python dictwriter_手把手教你写爬虫 |Python 采集大众点评数据采集实战
任務
采集 http://www.dianping.com/shanghai/hotel
私信小編01即可獲取大量Python學習資料
1. 發現網址規律url
能否成功采集某網站,該網站需要滿足兩個條件
- 我們有權限瀏覽
- 我們肉眼能在瀏覽器中看到
滿足這兩個條件后,我們就可以尋找網址規律。
一般簡單的網站只需要看看翻頁和網址欄即可,有難度的就需要使用開發者工具。
template?=?'http://www.dianping.com/shanghai/hotel/p{page}'for?page?in?range(1,?51):????url?=?template.format(page=page)????print(url)http://www.dianping.com/shanghai/hotel/p1
http://www.dianping.com/shanghai/hotel/p2
http://www.dianping.com/shanghai/hotel/p3
http://www.dianping.com/shanghai/hotel/p4
http://www.dianping.com/shanghai/hotel/p5
http://www.dianping.com/shanghai/hotel/p6
....
http://www.dianping.com/shanghai/hotel/p46
http://www.dianping.com/shanghai/hotel/p47
http://www.dianping.com/shanghai/hotel/p48
http://www.dianping.com/shanghai/hotel/p49
http://www.dianping.com/shanghai/hotel/p50
2. 嘗試對其中一個url進行訪問
先局部,后整體(先小后大)
我們需要先拿一個url測試訪問成功與否。
import?requestsurl?=?'http://www.dianping.com/shanghai/hotel/p1'headers?=?{'User-Agent':?'Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_15_6)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/85.0.4183.121?Safari/537.36'}resp?=?requests.get(url,?headers=headers)print(resp)response200說明訪問似乎還是正常的,但是不要掉以輕心,最好順便檢查下返回的網頁源代碼數據。
檢查方法
網頁中某字段,是否出現在resp.text中。一般多找幾次,確認resp.text與網頁內容能對應上,能對應上那就說明訪問是成功的。
resp.text3. 解析數據
解析數據可以用pyquery或者re庫,本教程只抓酒店名、地址、距離等少數幾個字段,只用pyquery就能很好的定位。
?
?
from?pyquery?import?PyQuerydoc?=?PyQuery(resp.text)for?block?in?doc.items('.hotelshop-list?.hotel-block'):????name?=?block('.hotel-name?a').text()????loc?=?block('.place').text()????quyu?=?loc.split(',')[0]????distance?=?loc.split(',')[-1]????print(name,?quyu,?distance)上海佘山世茂洲際酒店 松江區 距離松江站9.6km
上海和平飯店 南京東路 距離和平飯店30m
上海寶格麗酒店 大悅城 距離天潼路地鐵站175m
上海迪士尼樂園酒店 迪士尼 距離迪士尼地鐵站710m
上海外灘W酒店 北外灘/外白渡橋 距離國際客運中心地鐵站205m
上海也山花園酒店(崇明森林公園店) 東平森林公園 1km內無地鐵站
上海外灘華爾道夫酒店 外灘 距離威斯汀大酒店340m
上海半島酒店 外灘 距離和平飯店285m
御宿和庭酒店 梅川路 距離中環百聯400m
上海外灘悅榕莊酒店 北外灘/外白渡橋 距離提籃橋地鐵站440m
上海魯能JW萬豪侯爵酒店 塘橋 距離塘橋地鐵站870m
上海浦東香格里拉大酒店 陸家嘴 距離正大廣場180m
上海浦東麗思卡爾頓酒店 陸家嘴 距離國金中心35m
養云安縵酒店 閔行區 距離松江站12.1km
上海怡沁園度假村 東平森林公園 1km內無地鐵站
4. 存儲數據
推薦大家用csv存儲
import?csvcsvf?=?open('data/dianping.csv',?'a+',?encoding='utf-8',?newline='')fieldnames?=?['hotel',?'quyu',?'distance']writer?=?csv.DictWriter(csvf,?fieldnames=fieldnames)writer.writeheader()doc?=?PyQuery(resp.text)for?block?in?doc.items('.hotelshop-list?.hotel-block'):????name?=?block('.hotel-name?a').text()????loc?=?block('.place').text()????quyu?=?loc.split(',')[0]????distance?=?loc.split(',')[-1]????data?=?{'hotel':?name,????????????'quyu':?quyu,????????????'distance':?distance}????writer.writerow(data)????csvf.close()5. 整合
前面幾個步驟都成功后,我們可以把1-4整理合并成一個完整的代碼。
復制粘貼代碼時要注意代碼層次。
import?requestsfrom?pyquery?import?PyQueryimport?csvimport?time#新建csvcsvf?=?open('data/dianping.csv',?'a+',?encoding='utf-8',?newline='')fieldnames?=?['hotel',?'quyu',?'distance']writer?=?csv.DictWriter(csvf,?fieldnames=fieldnames)writer.writeheader()#批量生成網址urltemplate?=?'http://www.dianping.com/shanghai/hotel/p{page}'for?page?in?range(1,?51):????url?=?template.format(page=page)????headers?=?{'User-Agent':?'Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_15_6)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/85.0.4183.121?Safari/537.36'}????????#訪問url????resp?=?requests.get(url,?headers=headers)????time.sleep(1)????#解析網頁數據????doc?=?PyQuery(resp.text)????for?block?in?doc.items('.hotelshop-list?.hotel-block'):????????name?=?block('.hotel-name?a').text()????????loc?=?block('.place').text()????????quyu?=?loc.split(',')[0]????????distance?=?loc.split(',')[-1]????????????????#構造數據,存入csv????????data?=?{'hotel':?name,????????????????'quyu':?quyu,????????????????'distance':?distance}????????print(page,?data)????????writer.writerow(data)????????#關閉csvcsvf.close()總結
以上是生活随笔為你收集整理的python dictwriter_手把手教你写爬虫 |Python 采集大众点评数据采集实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: delphi7升级delphi2007可
- 下一篇: givemesomecredit数据_你