python網路爬蟲爬取房價資訊
阿新 • • 發佈:2019-01-30
爬取房天下(http://newhouse.cd.fang.com/house/s/)成都地區的新房資訊。
開啟http://newhouse.cd.fang.com/house/s/,F12進入控制檯
點選控制檯的左上角的按鈕,這是你可以將滑鼠移至房天下頁面的任何一個地方然後單擊,你就可以看到該地方在html程式碼中的位置,比如:我點選紅色區域的文字,那麼在控制檯中就會出現該文字在html程式碼中的位置。分析html程式碼,瞭解頁面結構,然後獲取你需要爬取內容在html程式碼中的路徑,再稍微做些整理,就可以得到你想要爬取的內容。我主要用的是beautifulsoup。
程式碼講解:
1.此段程式碼主要是獲取成都地區新房資訊在此網站上分成了多少頁,之後通過迴圈的方式將每一頁的資訊都爬取出來。
URL = 'http://newhouse.cd.fang.com/house/s/b91/' HTML = requests.get(URL) SOUP = BeautifulSoup(HTML.content, 'html.parser', from_encoding='gb18030') last_page = SOUP.select('.last') page_number = int(last_page[0]['href'].split('/')[3].split('9')[1]) print(page_number)
2.此段程式碼是解析了我要獲取的四項資訊,包括:小區名字,所在詳細地址,當前所處狀態,價格。將四項資訊分別存入四個陣列。
names_list = [] adresses_list = [] all_type_list = [] all_money_list = [] url_demo = 'http://newhouse.cd.fang.com/house/s/b9{}/' for i in range(1,(page_number+1)): url = url_demo.format(i) html = requests.get(url) soup = BeautifulSoup(html.content,'html.parser',from_encoding='gb18030') names = soup.select('.nlcd_name a'3.遍歷四個陣列,見資訊輸出,最後儲存在一個excel中。) adresses = soup.select('.address a') for name in names: names_list.append(name.text.strip()) for adress in adresses: adress_detail = re.findall(r'".+"',str(re.findall(r'title=".+"',str(adress))))[0] adresses_list.append(adress_detail.split('"')[1]) all_type = soup.findAll(name="span", attrs={"class":re.compile(r"forSale|inSale|outSale|zusale|zushou")}) for type in all_type: all_type_list.append(type.text) if soup.select('.kanzx'): all_money_list.append('無') all_money = soup.findAll(name="div", attrs={"class":re.compile(r"nhouse_price|kanesf")}) for money in all_money: all_money_list.append(money.text.strip()) else: all_money = soup.findAll(name="div", attrs={"class":re.compile(r"nhouse_price|kanesf")}) for money in all_money: all_money_list.append(money.text.strip())
all_message = [] for m in range(0,len(names_list)): message = [names_list[m],adresses_list[m],all_type_list[m],all_money_list[m]] print(message) all_message.append(message) df = pandas.DataFrame(all_message) df.to_excel('house_price.xlsx') print(df)
一共有726條資訊。