2017-4-3記爬點評酒店的一次玄學(xué)debug

其實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

源碼

https://github.com/CvnYv/learn-spider/blob/master/2017-3-29%E5%AD%98%E5%82%A8%E9%85%92%E5%BA%97%E6%95%B0%E6%8D%AE.py

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • @synthesize和@dynamic分別有什么作用?@property有兩個對應(yīng)的詞,一個是 @synthes...
    筆筆請求閱讀 637評論 0 1
  • 猜想runloop內(nèi)部是如何實現(xiàn)的?一般來講,一個線程一次只能執(zhí)行一個任務(wù),執(zhí)行完成后線程就會退出。如果我們需要一...
    筆筆請求閱讀 483評論 0 0
  • 聲明:本文講解的實戰(zhàn)內(nèi)容,均僅用于學(xué)習(xí)交流,請勿用于任何商業(yè)用途! 一、前言 強烈建議:請在電腦的陪同下,閱讀本文...
    Bruce_Szh閱讀 13,009評論 6 28
  • 每天都在修改請?zhí)?,好辛苦?最近工作上也不是特別順利,壓力很大~
    NCNeverland閱讀 186評論 0 0
  • 我們寫的應(yīng)用程序往往都不是靜態(tài)的,因為它們需要適應(yīng)用戶的需求以及為執(zhí)行各種任務(wù)而改變狀態(tài)。 在這些狀態(tài)之間轉(zhuǎn)換時,...
    sunmumu1222閱讀 837評論 0 2

友情鏈接更多精彩內(nèi)容