當前位置:
首頁 > 最新 > Python爬取攜程網酒店價格信息案例

Python爬取攜程網酒店價格信息案例

最近研究了一下怎麼利用Python爬蟲來爬取攜程網的酒店價格信息,研究幾天之後發現有一定的難度,不能用簡單的靜態網頁爬蟲來爬取到信息,注意原因在於輸入項太多,拼URL的時候發現城市名字後面都帶數字的,而這個數字有點莫名其妙,例如我查看的時候發現大連酒店的查詢URL就是Dalian6,而瀋陽就搞出了一個Shenyang451,不知道什麼時候就會變,由於不知道攜程網定義的邏輯,只能使用動態網頁爬蟲的方式來爬取信息。

動態爬蟲的一種實現方法就是使用Selenium,不想在明面上顯示頁面的,就用webdriver.PhantomJS來訪問攜程網每個要爬取信息的酒店URL,這個URL相對穩定不變,只要給出這個酒店URL列表,就可使用Selenium Webdriver的方式來訪問這些地址並從網頁上爬取需要的信息,需要什麼信息只要網頁上有的都可以爬下來。

程序實現邏輯簡單,直接上代碼(23行代碼):

#author: hanshiqiang365

import sys

import urllib

from selenium import webdriver

urls=["http://hotels.ctrip.com/hotel/400693.html?ctm_ref=hod_sr_lst_dl_n_1_11",

"http://hotels.ctrip.com/hotel/433189.html?ctm_ref=hod_sr_lst_dl_n_1_17",

"http://hotels.ctrip.com/hotel/400950.html?ctm_ref=hod_sr_lst_dl_n_1_13"]

def write_txt_file(path, txt):

with open(path, "a", encoding="utf-8", newline="") as f:

f.write(txt)

class Xc():

def ctrip_hotel_price(seif):

for url in urls:

driver = webdriver.PhantomJS()

driver.get(url)

hotelname=driver.find_element_by_class_name("cn_n").text

fangx_1=driver.find_element_by_class_name("room_unfold").text.split("
")[0]

jiage_1=driver.find_element_by_class_name("base_price").text

json_text=driver.find_element_by_xpath("//*[@id="htl_detail_htl_hotel"]").get_attribute("value")

driver.quit

write_txt_file("ctrip-hotel_price.txt", hotelname+"|"+fangx_1+"|"+jiage_1 + "
")

write_txt_file("ctrip-hotel_price.txt", json_text + "
")

s=Xc()

s.ctrip_hotel_price()

程序運行結束後,打開生成的TEXT文本文件就可以看到結果:

利用Selenium Webdriver來實現的動態網頁爬蟲有一個缺點,就是一個字「慢」!儘管已經採用webdriver.PhantomJS這種不需要在明面上打開瀏覽器運行的實現模式,性能上還是和Python利用request實現的靜態網頁爬蟲相差甚遠。這是由爬取攜程網房價信息這種業務需求和利用Selenium來實現動態網頁爬蟲這種技術實現方式兩者相互作用決定的。

從測試效果上而言,從攜程網上爬取酒店房價信息的業務目的還是可以實現的。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Python 或允許安全工具查看運行時的操作
Python盜號原理-代碼實現截屏鍵盤記錄遠程發送

TAG:Python |