1. 程式人生 > >python網路爬蟲爬取房價資訊

python網路爬蟲爬取房價資訊

爬取房天下(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'
) 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())
3.遍歷四個陣列,見資訊輸出,最後儲存在一個excel中。
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條資訊。