中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何通過python抓取二手房價數據

發布時間:2021-11-02 15:42:51 來源:億速云 閱讀:162 作者:iii 欄目:編程語言

這篇文章主要講解了“如何通過python抓取二手房價數據”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何通過python抓取二手房價數據”吧!

模塊安裝

同上次新房一樣,這里需要安裝以下模塊(當然如果已安裝就不用再裝了):

# 安裝引用模塊 pip3 install bs4 pip3 install requests pip3 install lxml pip3 install numpy pip3 install pandas

好了,安裝完成后,就可以開始寫代碼了。至于配置請求頭和代理IP地址的代碼,上次介紹新房已經說過了,這里不再贅述,下面直接上抓取代碼。

二手房價數據對象

在這里我們將二手房的房價信息,創建成一個對象,后續我們只要將獲取到的數據保存成對象,再處理就會方便很多。SecHouse  對象代碼如下所示:

# 二手房信息對象 class SecHouse(object):     def __init__(self, district, area, name, price, desc, pic):         self.district = district         self.area = area         self.price = price         self.name = name         self.desc = desc         self.pic = pic     def text(self):         return self.district + "," + \                 self.area + "," + \                 self.name + "," + \                 self.price + "," + \                 self.desc + "," + \                 self.pic

獲取二手房價信息并保存

準備好了,下面我們依然以貝殼為例,批量爬取其北京地區二手房數據,并保存到本地。這里我主要想說的是如何抓取數據過程,所以這里依然就保存成最簡單的  txt 文本格式。如果想保存到數據庫,可以自行修改代碼進行保存數據庫處理。

獲取區縣信息

我們在抓取二手房信息時,肯定想知道這個房源所在地區,所以這里我寫了個方法把北京市所有區縣信息抓取下來,并臨時保存至列表變量里,以備后續程序中使用,代碼如下:

# 獲取區縣信息 def get_districts():     # 請求 URL     url = 'https://bj.ke.com/xiaoqu/'     headers = create_headers()     # 請求獲取數據     response = requests.get(url, timeout=10, headers=headers)     html = response.content     root = etree.HTML(html)     # 處理數據     elements = root.xpath('///div[3]/div[1]/dl[2]/dd/div/div/a')     en_names = list()     ch_names = list()     # 循環處理對象     for element in elements:         link = element.attrib['href']         en_names.append(link.split('/')[-2])         ch_names.append(element.text)      # 打印區縣英文和中文名列表     for index, name in enumerate(en_names):         chinese_city_district_dict[name] = ch_names[index]     return en_names

獲取地區板塊

除了上面要獲取區縣信息,我們還應該獲取比區縣更小的板塊區域信息,同樣的區縣內,不同板塊地區二手房的價格等信息肯定不一樣,所以板塊對于我們來說也很重要,具有一次參考價值。獲取板塊信息代碼如下:

# 獲取某個區縣下所有板塊信息 def get_areas(district):     # 請求的 URL     page = "http://bj.ke.com/xiaoqu/{0}".format(district)     # 板塊列表定義     areas = list()     try:         headers = create_headers()         response = requests.get(page, timeout=10, headers=headers)         html = response.content         root = etree.HTML(html)         # 獲取標簽信息         links = root.xpath('//div[3]/div[1]/dl[2]/dd/div/div[2]/a')          # 針對list進行處理         for link in links:             relative_link = link.attrib['href']             # 最后"/"去掉             relative_link = relative_link[:-1]             # 獲取最后一節信息             area = relative_link.split("/")[-1]             # 去掉區縣名稱,以防止重復             if area != district:                 chinese_area = link.text                 chinese_area_dict[area] = chinese_area                 # 加入板塊信息列表                 areas.append(area)         return areas     except Exception as e:         print(e)

獲取二手房信息并保存

# 創建文件準備寫入 with open("sechouse.txt", "w", encoding='utf-8') as f:     # 定義變量     total_page = 1     # 初始化 list     sec_house_list = list()     # 獲取所有區縣信息     districts = get_districts()     # 循環處理區縣     for district in districts:         # 獲取某一區縣下所有板塊信息         arealist = get_areas(district)         # 循環遍歷所有板塊下的小區二手房信息         for area in arealist:             # 中文區縣             chinese_district = chinese_city_district_dict.get(district, "")             # 中文版塊             chinese_area = chinese_area_dict.get(area, "")             # 請求地址             page = 'http://bj.ke.com/ershoufang/{0}/'.format(area)             headers = create_headers()             response = requests.get(page, timeout=10, headers=headers)             html = response.content             # 解析 HTML             soup = BeautifulSoup(html, "lxml")              # 獲取總頁數             try:                 page_box = soup.find_all('div', class_='page-box')[0]                 matches = re.search('.*data-total-count="(\d+)".*', str(page_box))                 # 獲取總頁數                 total_page = int(math.ceil(int(matches.group(1)) / 10))             except Exception as e:                 print(e)              print(total_page)             # 設置請求頭             headers = create_headers()             # 從第一頁開始,遍歷到最后一頁             for i in range(1, total_page + 1):                 # 請求地址                 page = 'http://bj.ke.com/ershoufang/{0}/pg{1}'.format(area,i)                 print(page)                 # 獲取返回內容                 response = requests.get(page, timeout=10, headers=headers)                 html = response.content                 soup = BeautifulSoup(html, "lxml")                  # 獲得二手房查詢列表                 house_elements = soup.find_all('li', class_="clear")                 # 遍歷每條信息                 for house_elem in house_elements:                     # 價格                     price = house_elem.find('div', class_="totalPrice")                     # 標題                     name = house_elem.find('div', class_='title')                     # 描述                     desc = house_elem.find('div', class_="houseInfo")                     # 圖片地址                     pic = house_elem.find('a', class_="img").find('img', class_="lj-lazy")                      # 清洗數據                     price = price.text.strip()                     name = name.text.replace("\n", "")                     desc = desc.text.replace("\n", "").strip()                     pic = pic.get('data-original').strip()                      # 保存二手房對象                     sec_house = SecHouse(chinese_district, chinese_area, name, price, desc, pic)                     print(sec_house.text())                     sec_house_list.append(sec_house)             # 循環遍歷將信息寫入 txt             for sec_house in sec_house_list:                 f.write(sec_house.text() + "\n")

到這里代碼就寫好了,現在我們就可以通過命令 python sechouse.py 運行代碼進行數據抓取了。抓取的結果我們可以打開當前目錄下  sechouse.txt 文件查看,結果如下圖所示:

如何通過python抓取二手房價數據

感謝各位的閱讀,以上就是“如何通過python抓取二手房價數據”的內容了,經過本文的學習后,相信大家對如何通過python抓取二手房價數據這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰宁| 阿拉尔市| 沁水县| 建宁县| 安福县| 巴林右旗| 陵水| 昌邑市| 东辽县| 呼图壁县| 巢湖市| 嘉峪关市| 宁安市| 弥勒县| 呼伦贝尔市| 虎林市| 尤溪县| 万安县| 灌云县| 泰来县| 射阳县| 阿巴嘎旗| 红桥区| 衡水市| 灵璧县| 农安县| 城步| 泸州市| 大宁县| 平乡县| 隆子县| 漳浦县| 和田县| 新郑市| 安顺市| 沭阳县| 竹山县| 策勒县| 湖北省| 阳江市| 临潭县|