使用Python解決清明出遊選房子的住宿問題

2021-08-16 21:17:51 字數 4711 閱讀 9792

清明節馬上到了,很久沒出來旅遊的我早早就訂了機票準備嗨皮去了

然而選房子時候發現了airbnb這個神奇的**(我不是在打廣告),覺得上面房子還不錯。但是!!!新增了選房條件竟然還有三百多條符合條件的資訊讓我這個懶的去挑選的人相當崩潰,於是就想用自己學了不到一周的python來把這些資料爬下來,嘿嘿嘿~~~

使用的python版本是3.6.4

編譯器是pycharm

首先開啟網頁選好條件之後 f12 開啟 -->開發者模式-->network

選第一條交易記錄,將請求頭以及請求引數都複製過來

headers = 

query_parameters =

之後就是正常的使用requests獲取頁面資訊,使用beautifulsoup來解析頁面

# 獲取html頁面

# 獲取**分頁的總頁數

def get_pages(soup):

li = soup.find_all('li', ) # 找到分頁的li

nums_div = li[-1].find('div', ) # 最後乙個li中的div內容就是總頁數

return nums_div.text

def get_resource(soup, result):

details = soup.find_all('div', ) # 幾室幾廳

titles = soup.find_all('div', ) # **標題

prices = soup.find_all('span', ) # 房子**

for i, title in enumerate(titles):

temp = [title.text, details[i].text, prices[2 * i].text] # **有兩個的span,後面那個不用因此取偶數倍i

return result

之後再有乙個將最終的資料寫入到excel**中的方法(使用自帶的csv庫)

def write_data(data, name):

with open(name, 'w', errors='ignore', newline='') as f:

f_csv = csv.writer(f)

f_csv.writerows(data)

最終就是編寫main方法了  啦啦啦啦啦。。。

# 全域性變數

final =

if __name__ == '__main__':

url = "" # **是airbnb,準備去重慶玩發現的乙個提供住宿資訊的**

html_text = get_html(url)

pages = get_pages(beautifulsoup(html_text, 'lxml'))

for i in range(0, int(pages)): # 頁數從零開始

query_parameters['section_offset'] = str(i) # 觀察頁面發現分頁根據get的引數section_offset來決定

html_text = get_html(url) # 修改get引數後繼續請求頁面

write_data(final, 'file\house.csv') # 檔案儲存在該目錄下的file資料夾中(手動建立file資料夾)

以下是完整**,第一次發部落格,還是乙個程式設計新手用看了沒幾天python寫的,感覺自己要上天了呢,哈哈哈哈。。。

# 獲取html頁面

# 獲取**分頁的總頁數

def get_pages(soup):

li = soup.find_all('li', ) # 找到分頁的li

nums_div = li[-1].find('div', ) # 最後乙個li中的div內容就是總頁數

return nums_div.text

def get_resource(soup, result):

details = soup.find_all('div', ) # 幾室幾廳

titles = soup.find_all('div', ) # **標題

prices = soup.find_all('span', ) # 房子**

for i, title in enumerate(titles):

temp = [title.text, details[i].text, prices[2 * i].text] # **有兩個的span,後面那個不用因此取偶數倍i

return result

def write_data(data, name):

with open(name, 'w', errors='ignore', newline='') as f:

f_csv = csv.writer(f)

f_csv.writerows(data)

# 全域性變數

final =

if __name__ == '__main__':

url = "" # **是airbnb,準備去重慶玩發現的乙個提供住宿資訊的**

html_text = get_html(url)

pages = get_pages(beautifulsoup(html_text, 'lxml'))

for i in range(0, int(pages)): # 頁數從零開始

query_parameters['section_offset'] = str(i) # 觀察頁面發現分頁根據get的引數section_offset來決定

html_text = get_html(url) # 修改get引數後繼續請求頁面

write_data(final, 'file\house.csv') # 檔案儲存在該目錄下的file資料夾中(手動建立file資料夾)

全劇終~~

解決Python使用列表副本的問題

要使用乙個列表的副本,要用切片進行列表複製,這樣會形成兩個獨立的列表。切記不要將列表賦值給乙個列表,因為這樣並不能得到兩個列表。1 使用賦值語法建立列表副本的問題 下邊就將列表賦值,驗證是否形成獨立的列表 squares list range 1,11 print squares原始值為 end p...

使用python帶你解決鍊錶深拷貝

題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標random指向乙個隨機節點 請對此鍊錶進行深拷貝,並返回拷貝後的頭結點。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 解題思路 先把原鍊錶進行複製,將複製的節點加在原節點的後面,...

python 使用 最大生成樹 解決 營救問題

你是紅軍指揮官,在一場軍事演習中,你的部分軍隊被藍軍包圍了。藍軍包圍的方式如下 在上圖中,每個頂點表示藍軍的部隊,頂點中數字表示藍軍在此處的人數 千人 兩點間的邊表示藍軍兩個部隊間形成的火線,火線構成的圈即是一道包圍,一條火線的戰鬥力為其相連兩個部隊的人數和,也是你要進攻這條火線所要消耗的兵力。你可...