其實3月29日就寫了爬取點評酒店的代碼(想以后去成都工作生活所以就選了成都),但當(dāng)天運行爬到第三頁就出錯了,由于功力尚淺,debug了一晚上不知什么原因造成了bug,就放那等日后再說了.今天嘗試run了一下,又可以用了,不知是什么神秘力量暗中抬了我一手.
開發(fā)環(huán)境python3.5, PyCharm, Ubuntu16.0.4
暫時還只會寫點簡單的代碼抓取靜態(tài)頁面,所以用到的庫都很簡單:
- requests
- BeautifulSoup (剛學(xué)會BeautifulSoup所以就多練練,盡量不用re)
- csv (也是只懂點皮毛)
分析網(wǎng)頁
- 觀察url的特征并構(gòu)建url(本來當(dāng)時是打算按之前那個爬豆瓣top250的套路模仿人類實現(xiàn)翻頁功能的,然后return下一頁的鏈接,因為到第3頁就爬不動了,所以改成了利用range手動拼接下一頁的鏈接地址)

鏈接.png
for n in range(1,51):
url ='http://www.dianping.com/chengdu/hotel/p'+str(n)
- 觀察頁面特征,由于本次只打算爬名稱,位置,價格以及每個酒店的詳情鏈接,所以F12一下,結(jié)合網(wǎng)頁源代碼想一下用哪個標簽比較穩(wěn)妥一點,然后BeautifulSoup出要爬的信息

詳情.png
soup = BeautifulSoup(html, "lxml")
ul_list = soup.find("ul", attrs={"class": "hotelshop-list"})
for li_list in ul_list.find_all("li", attrs={"class": " hotel-block"
" J_hotel-block"}):
hotel_name = li_list.find("h2", attrs={"class": "hotel-name"}).a.string
hotel_url = 'http://www.dianping.com' + li_list.find("h2", attrs={
"class": "hotel-name"}).a['href']
hotel_place = li_list.find("p", attrs={"class": "place"}).a.string\
+ ', ' + li_list.find("span", attrs={"class": "walk-dist"}).string
hotel_price = li_list.find("div", attrs={"class": "price"}).strong.string
把爬到的數(shù)據(jù)保存到csv文件
csv_file =open("../files/chengduhotel.csv",'wt',encoding='utf-8')
try:
writer = csv.writer(csv_file)
writer.writerow(('酒店名稱','位置','價格','詳情鏈接'))
writer.writerow((hotel_name,hotel_place,hotel_price,hotel_url))
效果圖

效果.png