安居客房源信息爬取
工作之余所寫 現(xiàn)今能用
小白專屬,私信可回。
import requests from bs4 import BeautifulSoup from loguru import logger import time# 構(gòu)建請求頭 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36','Cookie': # 此處放置你自己的cookie信息,否則 不能用,不會的建議百度下。}# 獲取詳情頁面url def get_url(base_url):resp = requests.get(base_url, headers=headers)html = resp.textsoup = BeautifulSoup(html, 'lxml')mes_divs = soup.find('section', class_='list').find_all('div', class_='property')link_urls = []for mes_div in mes_divs:link = mes_div.find('a')['href']link_urls.append(link)return link_urls# 解析詳情頁面url def parse_url(link_url, f):resp = requests.get(link_url, headers=headers)html = resp.textsoup = BeautifulSoup(html, 'lxml')try:# 標(biāo)題title = list(soup.find('h1', class_='title').stripped_strings)title = ''.join(title)print(title)# 總價price_num = list(soup.find('div', class_='maininfo-price-wrap').stripped_strings)price_num = ''.join(price_num)# 均價price_avg = list(soup.find('div', class_='maininfo-avgprice-price').stripped_strings)price_avg = ''.join(price_avg)# 房型house_model = list(soup.find('div', class_='maininfo-model-item maininfo-model-item-1').stripped_strings)house_model = ''.join(house_model)# 面積house_num = list(soup.find('div', class_='maininfo-model-item maininfo-model-item-2').stripped_strings)house_num = ''.join(house_num)# 朝向house_des = list(soup.find('div', class_='maininfo-model-item maininfo-model-item-3').stripped_strings)house_des = ''.join(house_des)# 地址house_add = list(soup.find('div', class_='maininfo-meta').stripped_strings)house_add = ''.join(house_add)# 房屋信息house_info = list(soup.find('div', class_='houseInfo').stripped_strings)house_info = ''.join(house_info).replace('房源信息', '').replace('交易信息', '').replace('物業(yè)類型', '\n物業(yè)類型: ').replace('產(chǎn)權(quán)年限', '\n產(chǎn)權(quán)年限: ').replace('參考預(yù)算', '\n參考預(yù)算: ').replace('房貸計算發(fā)布信息', '').replace('發(fā)布公司', '\n發(fā)布公司: ').replace('發(fā)布時間', '\n發(fā)布時間: ').replace('營業(yè)執(zhí)照', '\n營業(yè)執(zhí)照: ').replace('官方核驗房源', '').replace('核驗編碼', '\n核驗編碼: ')f.write('{},{},{},{},{}\n'.format(title, price_num, price_avg, house_model, house_num))# 反爬機制 避免短時間大量請求 被封iptime.sleep(1)except:# 此處拋出的異常大多為需要 滑動驗證頁面 暫時不做處理# 想法是當(dāng)發(fā)現(xiàn)需滑動驗證時 重新加載url 獲取數(shù)據(jù)print('==========err')def start():# logger 日志模塊logger.add("runtime_err.log", rotation="500 MB")# 文件名time_name = 'ajk_jm_price' + str(time.strftime("%Y-%m-%d", time.localtime())) + '.csv'# 防止重復(fù)打開關(guān)閉文件 造成cpu資源浪費with open(time_name, 'a', encoding='utf-8') as f:f.write('{},{},{},{},{}\n'.format('標(biāo)題', '總價', '均價', '房型', '面積'))# 僅獲取前10頁的內(nèi)容for i in range(0,10):base_url = 'https://xm.anjuke.com/sale/jimei/p' + str(i) + '/'link_urls = get_url(base_url)for link_url in link_urls:parse_url(link_url, f)if __name__ == '__main__':start()```總結(jié)
 
                            
                        - 上一篇: 阿里云平台的人脸识别接口测试
- 下一篇: java线上医药用品分销系统设计与实现计
