成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

看我如何抓取二手房價數據

開發 后端
上次為大家介紹了如何通過 Python 抓取新房樓盤價格信息,很多朋友都在問,那二手房最新的價格信息要如何抓取呢?好!今天就再來為大家講一講,二手房的房價信息要怎么抓取。

 上次為大家介紹了如何通過 Python 抓取新房樓盤價格信息,很多朋友都在問,那二手房最新的價格信息要如何抓取呢?好!今天就再來為大家講一講,二手房的房價信息要怎么抓取。

[[324858]]

模塊安裝

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

 

  1. # 安裝引用模塊 
  2. pip3 install bs4 
  3. pip3 install requests 
  4. pip3 install lxml 
  5. pip3 install numpy 
  6. pip3 install pandas 

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

二手房價數據對象

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

 

  1. # 二手房信息對象 
  2. class SecHouse(object): 
  3.     def __init__(self, district, area, name, price, desc, pic): 
  4.         self.district = district 
  5.         self.area = area 
  6.         self.price = price 
  7.         self.name = name 
  8.         self.desc = desc 
  9.         self.pic = pic 
  10.     def text(self): 
  11.         return self.district + "," + \ 
  12.                 self.area + "," + \ 
  13.                 self.name + "," + \ 
  14.                 self.price + "," + \ 
  15.                 self.desc + "," + \ 
  16.                 self.pic 

獲取二手房價信息并保存

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

獲取區縣信息

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

 

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

獲取地區板塊

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

 

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

獲取二手房信息并保存

 

  1. # 創建文件準備寫入 
  2. with open("sechouse.txt""w", encoding='utf-8'as f: 
  3.     # 定義變量 
  4.     total_page = 1 
  5.     # 初始化 list 
  6.     sec_house_list = list() 
  7.     # 獲取所有區縣信息 
  8.     districts = get_districts() 
  9.     # 循環處理區縣 
  10.     for district in districts: 
  11.         # 獲取某一區縣下所有板塊信息 
  12.         arealist = get_areas(district) 
  13.         # 循環遍歷所有板塊下的小區二手房信息 
  14.         for area in arealist: 
  15.             # 中文區縣 
  16.             chinese_district = chinese_city_district_dict.get(district, ""
  17.             # 中文版塊 
  18.             chinese_area = chinese_area_dict.get(area, ""
  19.             # 請求地址 
  20.             page = 'http://bj.ke.com/ershoufang/{0}/'.format(area) 
  21.             headers = create_headers() 
  22.             response = requests.get(page, timeout=10, headers=headers) 
  23.             html = response.content 
  24.             # 解析 HTML 
  25.             soup = BeautifulSoup(html, "lxml"
  26.  
  27.             # 獲取總頁數 
  28.             try: 
  29.                 page_box = soup.find_all('div', class_='page-box')[0] 
  30.                 matches = re.search('.*data-total-count="(\d+)".*', str(page_box)) 
  31.                 # 獲取總頁數 
  32.                 total_page = int(math.ceil(int(matches.group(1)) / 10)) 
  33.             except Exception as e: 
  34.                 print(e) 
  35.  
  36.             print(total_page) 
  37.             # 設置請求頭 
  38.             headers = create_headers() 
  39.             # 從第一頁開始,遍歷到最后一頁 
  40.             for i in range(1, total_page + 1): 
  41.                 # 請求地址 
  42.                 page = 'http://bj.ke.com/ershoufang/{0}/pg{1}'.format(area,i) 
  43.                 print(page) 
  44.                 # 獲取返回內容 
  45.                 response = requests.get(page, timeout=10, headers=headers) 
  46.                 html = response.content 
  47.                 soup = BeautifulSoup(html, "lxml"
  48.  
  49.                 # 獲得二手房查詢列表 
  50.                 house_elements = soup.find_all('li', class_="clear"
  51.                 # 遍歷每條信息 
  52.                 for house_elem in house_elements: 
  53.                     # 價格 
  54.                     price = house_elem.find('div', class_="totalPrice"
  55.                     # 標題 
  56.                     name = house_elem.find('div', class_='title'
  57.                     # 描述 
  58.                     desc = house_elem.find('div', class_="houseInfo"
  59.                     # 圖片地址 
  60.                     pic = house_elem.find('a', class_="img").find('img', class_="lj-lazy"
  61.  
  62.                     # 清洗數據 
  63.                     price = price.text.strip() 
  64.                     name = name.text.replace("\n"""
  65.                     desc = desc.text.replace("\n""").strip() 
  66.                     pic = pic.get('data-original').strip() 
  67.  
  68.                     # 保存二手房對象 
  69.                     sec_house = SecHouse(chinese_district, chinese_area, name, price, desc, pic) 
  70.                     print(sec_house.text()) 
  71.                     sec_house_list.append(sec_house) 
  72.             # 循環遍歷將信息寫入 txt 
  73.             for sec_house in sec_house_list: 
  74.                 f.write(sec_house.text() + "\n"

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

 

總結本文為大家介紹了如何通過 Python 將房產網上的二手房數據批量抓取下來,經過一段時間的抓取,我們就可以將抓取的結果進行對比分析,看看二手房價最近是漲還是跌?如果喜歡我們的文章,請關注收藏再看。

責任編輯:華軒 來源: Python技術
相關推薦

2018-10-22 13:10:43

分析Python房價

2019-12-19 15:56:10

Python數據工具

2018-08-21 21:13:32

爬蟲Python住房

2020-06-05 19:19:03

蘋果促銷商家

2018-10-29 15:41:16

二手硬件處理器

2013-03-19 14:25:36

2011-06-08 21:41:14

噴墨打印機推薦

2020-10-27 15:18:39

央行數字人民幣穆長春

2020-03-30 21:36:57

硬件CPU顯卡

2023-07-11 06:32:03

2023-07-12 07:06:23

2022-06-29 09:24:23

顯卡崩盤價格

2020-06-04 18:30:06

二手硬件CPU主板

2012-08-31 10:02:34

2016-01-29 10:12:01

IT168

2018-12-04 16:44:36

RX比特幣網站

2018-01-08 11:24:38

云計算標準和應用大會轉轉58同城

2024-09-26 09:38:06

2024-09-18 15:15:35

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区三区久久久久久久久 | 国产日韩精品一区 | 国产精品综合 | 中文字幕在线观 | 黄色毛片在线播放 | 成人自拍av| 女同久久另类99精品国产 | 国产一区日韩在线 | www.久久久久久久久久久久 | 免费中文字幕日韩欧美 | 国产成人一区二区三区电影 | 日本不卡免费新一二三区 | 黄色片视频免费 | 91亚洲精选 | 久久99国产精一区二区三区 | 99福利视频 | 亚洲欧美高清 | 日韩高清一区 | 国产精品国产三级国产aⅴ入口 | 亚洲精品第一页 | 黑人巨大精品欧美一区二区免费 | 丝袜美腿av| 一区二区精品在线 | 欧美极品少妇xxxxⅹ免费视频 | 亚洲aⅴ| 色婷婷综合久久久中文字幕 | 国产精品久久久久久久一区二区 | 欧美精品久久久 | 久久久激情视频 | 美女视频一区二区 | 麻豆视频国产在线观看 | 久久天天躁狠狠躁夜夜躁2014 | 丁香久久| 在线三级网址 | 中文字幕av亚洲精品一部二部 | 在线观看中文字幕 | 国产免费人成xvideos视频 | 国产精品自产av一区二区三区 | 91 在线| 正在播放国产精品 | 国产精品视频网 |