北京這麼大,總有一套房子適合自己;
一、選擇目標網站:
鏈[lian]家[jia]:https://bj.lianjia.com/
點擊【租房】,進入租房首頁:
這就是要爬取的首頁了;
二、先爬取一頁
1、分析頁面
右擊一個房源的鏈接,點擊[檢查],如圖:
進入開發者模式,
此時可以看到 a 標籤中的鏈接:
使用 xpath 就可以把鏈接提取出來,不過該鏈接是真實 url 的後半段,需要進行字符串拼接才能獲取到真正的 url;
後面會在代碼中體現;
爬取的信息暫且只對下圖中標出的進行爬取:
包括 標題、時間、價格、房間格局、面積 ;
三、對全部頁面進行爬取
1、分析頁面 url
點擊租房,找到其跳轉到的網頁:https://bj.lianjia.com/zufang/
對,這就是要爬取的首頁:
我們往下拉到最底端,點擊下一頁或者其他頁,
第 1 頁:https://bj.lianjia.com/zufang/pg1/#contentList
第 2 也:https://bj.lianjia.com/zufang/pg2/#contentList
第 3 頁:https://bj.lianjia.com/zufang/pg3/#contentList
.
.
.
第 100 頁:https://bj.lianjia.com/zufang/pg100/#contentList
通過觀察 url 可以發現規律:每一頁只有 pg 後面的數字在變,且與頁數相同;
拼接字符串後使用一個循環即可對所有頁面進行爬取;
四、源碼
開發工具:pycharm
python版本:3.7.2
import requests
from lxml import etree
#編寫了一個常用的方法,輸入url即可返回text的文本;
def get_one_page(url):
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
}
response = requests.get(url,headers=headers)
response.encoding = 'utf-8'
if response.status_code == 200:
return response.text
else:
print("請求狀態碼 != 200,url錯誤.")
return None
for number in range(0,101): #利用range函數循環0-100,抓去第1頁到100頁。
initialize_url = "https://bj.lianjia.com/zufang/pg" + str(number) + "/#contentList" #字符串拼接出第1頁到100頁的url;
html_result = get_one_page(initialize_url) #獲取URL的text文本
html_xpath = etree.HTML(html_result) #轉換成xpath格式
#抓去首頁中的url(每頁有30條房源信息)
page_url = html_xpath.xpath("//div[@class='content w1150']/div[@class='content__article']//div[@class='content__list']/div/a[@class='content__list--item--aside']/@href")
for i in page_url: #循環每一條房源url
true_url = "https://bj.lianjia.com" + i #獲取房源的詳情頁面url
true_html = get_one_page(true_url) #獲取text文本
true_xpath = etree.HTML(true_html) #轉換成xpath格式
#抓取頁面題目,即:房源詳情頁的標題
title = true_xpath.xpath("//div[@class='content clear w1150']/p[@class='content__title']//text()")
#抓取發佈時間並對字符串進行分割處理
release_date = true_xpath.xpath("//div[@class='content clear w1150']//div[@class='content__subtitle']//text()")
release_date_result = str(release_date[2]).strip().split(":")[1]
#抓取價格
price = true_xpath.xpath("//div[@class='content clear w1150']//p[@class='content__aside--title']/span//text()")
#抓取房間樣式
house_type = true_xpath.xpath("//div[@class='content clear w1150']//ul[@class='content__aside__list']//span[2]//text()")
#抓取房間面積
acreage = true_xpath.xpath("//div[@class='content clear w1150']//ul[@class='content__aside__list']//span[3]//text()")
print(str(title) + " --- " + str(release_date_result) + " --- " + str(price) + " --- " + str(house_type) + " --- " + str(acreage))
#寫入操作,將信息寫入一個text文本中
with open(r"E:\admin.txt",'a') as f:
f.write(str(title) + " --- " + str(release_date_result) + " --- " + str(price) + " --- " + str(house_type) + " --- " + str(acreage) + "\n")
最後將爬取的信息一邊輸出一邊寫入文本;當然也可以直接寫入 JSON 文件或者直接存入數據庫;
開心就好。