爬取链家网站的北京租房信息
本來準備這個暑假好好復習,但學校安排暑期實踐,既然學校安排這個,而且我自己也覺得需要提高一下自己的能力,所以靜下心來做點事吧。我們要做到項目是分析北京地區的租房的信息分析。
我們需要做的是爬取鏈家網站上北京地區的租房信息。鏈家作為國內比較出名的房地產中介公司,發布的房地產租房信息還是不叫權威的。
我們需要做的分為兩步:找到各個租房頁面的鏈接,爬取每個租房頁面的數據。
第一步找到每個租房頁面的鏈接,北京地區的租房頁面的初始鏈接為https://bj.lianjia.com/zufang/pg1/,下一頁的地址就是把后面的pg1改成pg2,以此后推,一共有100個頁面。
具體實現代碼如下:
for i in range(1,101):firsturl=r"https://bj.lianjia.com/zufang/pg%d/"%i # list.append(firsturl)title,l=frist(firsturl)我們需要在這個頁面上爬取每個具體房屋頁面的URL地址。
具體實現代碼如下:
def frist(firsturl):time.sleep(3)title=[]l=[]html=requests.get(firsturl)#html可能亂碼,soup會轉碼soup = BeautifulSoup(html.content)for link in soup.find_all('h2'):if len(str(link))>84:# href=link.get('href')li=link.a['href']t= link.a["title"]title.append(t)l.append(li)return title,l第二步在每個租房頁面上提取自己想要的信息,我們已知每個租房頁面上的URL,所以我們設計一個函數可以根據一個URL可以提取我們想要的數據。具體代碼實現如下:
def single(url):# send_headers={"User-Agent":" Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36", # "Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8", # "Connection":"keep-alive", # "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"} # html=requests.get(url)soup=BeautifulSoup(html.content)soup1=soup.find(class_='zf-room')#tag類型price=soup.find_all(class_='total')[0].stringarea=soup.find_all(class_='lf')[0].get_text()[3:8:]housetype=soup.find_all(class_='lf')[1].get_text()floor=soup.find_all(class_='lf')[2].get_text()toward=soup.find_all(class_='lf')[3].get_text()subline=soup1.find_all("p")[4].get_text()local=soup1.find_all("p")[6].get_text()print(price,area,housetype,floor,toward,subline,local) # for i in soup.find_all("span"): # print (i) # price.append(i)return price,area,housetype,floor,toward,subline,local我們現在已經可以將這兩部分合并在一起就好啦。
注:一、因為我們如果很高頻率的登錄網站,網站會把我們給斷開,所以我們選擇time.sleep()來減輕訪問時間
? ? ? 二、我們第一步得到的網址我們可以先保存在本地,然后我們可以讀取文件,這樣可以避免多次訪問。
? ? ? 三、當我們爬取一半時忽然無法執行,可以將已經執行好的數據下來,再將代碼從斷開的地方重新執行,這樣可以節省很多時間。
代碼傳送門
總結
以上是生活随笔為你收集整理的爬取链家网站的北京租房信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猝灭剂BHQ-1 amine/13086
- 下一篇: 8255A控制八位七段LED数码管