1 Star 0 Fork 0

我不明白/房天下爬虫

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
fangdata 11.79 KB
一键复制 编辑 原始数据 按行查看 历史
我不明白 提交于 2018-06-26 06:41 . 定了各类信息的变量
# coding=utf-8
from bs4 import BeautifulSoup
import requests
from time import sleep
# 设置城市
City_Name = 'qd'
page = 'http://newhouse.{0}.fang.com/house/s'.format(City_Name)
# 定义Download_Newitem_List()函数是为了提取指定城市楼盘列表的链接,并存放到指定的文件中
def Download_Newitem_List(url, try_num=2):
global City_Name
print('正在下载:', url)
try:
all_html = requests.get(url, timeout=10)
except Exception as e:
print('下载错误:', e.reason)
all_html = None
if try_num > 0:
if hasattr(e, 'code') and 500 <= e.code < 600:
return Download_Newitem_List(url, try_num - 1)
all_html.encoding = "gb18030"
soup = BeautifulSoup(all_html.text, "html5lib")
# 提取新楼盘项目总数量
Item_Total = soup.find('a', id="allUrl").find('span').text.replace('(', '').replace(')', '')
# 如果余数大于0那么总项目数整除每页20项目数+1
if (int(Item_Total) % 20) > 0:
Page_Num = (int(Item_Total) // 20) + 1
else:
Page_Num = (int(Item_Total) // 20)
with open('{0}_list_link.txt'.format(City_Name), 'w', encoding='utf-8') as f:
for i in range(1, Page_Num + 1):
New_Page_Link = 'http://newhouse.{0}.fang.com/house/s/b9{1}'.format(City_Name, i)
print(New_Page_Link)
print(New_Page_Link, file=f)
# 定义Download_item_link(City)函数是为了提取指定城市列表的链接中每一个开盘项目的链接,并存放到指定的文件中。
def Download_item_link(City):
import os
# 判断文件文件是否存在如果存在则删除,该部分以后应进行优化而并非删除。
if os.path.exists('{0}_Newall_link.txt'.format(City)):
os.remove('{0}_Newall_link.txt'.format(City))
with open('{0}_list_link.txt'.format(City), 'r', encoding='utf-8') as f:
# print(f.readlines())
for line in f.readlines():
print('正在读取:', line)
sleep(2)
try:
all_html = requests.get(line.strip(), timeout=10)
all_html.encoding = "gb18030"
# print(all_html.text)
except Exception as e:
print('下载错误:', e)
# if try_num > 0:
# if hasattr(e, 'code') and 500 <= e.code < 600:
# return Download_Newitem_List(url, try_num - 1)
soup = BeautifulSoup(all_html.text, "html5lib")
master_html = soup.find_all('div', class_='nlcd_name')
with open('{0}_Newall_link.txt'.format(City), 'a', encoding='utf-8') as d:
for link in master_html:
# print(link.get_text().rstrip() + ':' + link.a['href'].rstrip())
print(link.a['href'].rstrip(), file=d)
def Download_item_info(City_Name):
# 读取相应城市的新楼盘文件
with open('{0}_Newall_link.txt'.format(City_Name), 'r', encoding='utf-8') as f:
for url in f:
print(url.rstrip())
####首先读取指定页面的信息
try:
all_html = requests.get(url.rstrip(), timeout=10)
all_html.encoding = "gb18030"
# print(all_html.text)
except Exception as e:
print('下载错误:', e)
soup = BeautifulSoup(all_html.text, "html5lib")
# soup = BeautifulSoup(all_html.text, "lxml")
# 楼盘名称
try:
Sale_item_name = soup.find('div', class_='inf_left1 ').find('strong').get_text()
print(Sale_item_name)
except AttributeError as e:
Sale_item_name = soup.find('div', class_='lp-info').find('span').get_text()
print(Sale_item_name,'该楼盘为写字楼')
# 楼盘评分
try:
Sale_item_score = soup.find('div', class_="tit").find('a').get_text().strip()
print(Sale_item_score)
except AttributeError as e:
Sale_item_score = soup.find('div', class_="lp-info").find('strong').get_text().strip()
print(Sale_item_score,'该楼盘为写字楼')
# 楼盘均价
try:
Sale_item_price = soup.find('span', class_="prib cn_ff").get_text()
print(Sale_item_price)
except AttributeError as e:
Sale_item_price = soup.find('div', class_="l-price").find('strong').get_text()
print(Sale_item_price)
# 主力户型
try:
Sale_item_master_temp = soup.find('div', class_='fl zlhx').findAll('a')
Sale_item_master = [i.get_text() for i in Sale_item_master_temp if len(i.get_text()) > 0 ]
print('-'.join(Sale_item_master))
except AttributeError as e:
Sale_item_master=''
print('该楼盘没有主力户型')
# 近期开盘时间--多个项目的页面代码均有差别,存在问题。
try:
Sale_item_startdate = soup.find('a', class_="kaipan").get_text()
print(Sale_item_startdate)
except AttributeError as e:
Sale_item_startdate = soup.find('span', style="width:400px").find('a').get_text()
print(Sale_item_startdate)
# 先提取详细信息的链接地址
####楼盘全部户型链接
try:
Sale_item_model_link=soup.find('a', class_='allhxt fl').get('href')
print(Sale_item_model_link)
except AttributeError as e:
Sale_item_model_link=''
print('没有楼盘户型信息')
#如果户型链接存在,则进行户型信息的提取。
if len(Sale_item_model_link)>0:
####楼盘详情
Sale_item_info_link_temp = soup.find('div', id="orginalNaviBox").findAll('a')
Sale_item_info_list = [i['href'] for i in Sale_item_info_link_temp]
Sale_item_info_link= Sale_item_info_list[1]
print(Sale_item_info_link)
try:
Sale_item_info_html = requests.get(Sale_item_info_link, timeout=10)
Sale_item_info_html.encoding = "gb18030"
except Exception as e:
print('下载错误:', e)
Sale_item_info_soup=BeautifulSoup(Sale_item_info_html.text, "lxml")#如果采用html5lib后续代码会报错。
####楼盘基本信息
#定义基本信息变量
Item_base_price='' #价格
Item_base_wylb='' #物业类别
Item_base_tese='' #项目特色
Item_base_buildcategory='' #建筑类别
Item_base_zx='' #装修状况
Item_base_year='' #产权年限
Item_base_hxwz='' #环线位置
Item_base_kfs='' #开发商
Item_base_address='' #楼盘地址
# 物业类别
# Item_property_category=Sale_item_info_soup.find('ul', class_="list clearfix").find('div',class_='list-right').title
# 建筑类别
# Item_build_category=Sale_item_info_soup.find('span', class_="bulid-type").text
# 产权年限
# Item_right_years=Sale_item_info_soup.findall('div', class_='clearfix cqnx_512').text
####楼盘销售信息
#定义销售信息变量
Item_sale_status='' #销售状态
Item_sale_yh = '' #楼盘优惠
Item_sale_starttime = '' #开盘时间
Item_sale_jftime = '' # 交房时间
Item_sale_address = '' # 售楼地址
Item_sale_telphone = '' # 咨询电话
Item_sale_master = '' # 主力户型
Item_sale_ysxkz = '' # 预售许可证
Item_sale_ysxkz_time = '' # 预售许可证发证时间
Item_sale_ysxkz_bdlp = '' # 预售许可证绑定楼盘
####楼盘周边设施
# 定义周边配套信息的变量
Item_near_school = ''
Item_near_university = ''
Item_near_postoffice = ''
Item_near_market = ''
Item_near_bank = ''
Item_near_bus = ''
Item_near_other = ''
Item_near_matching = ''
Item_near_kindergarten = ''
Item_near_hospital = ''
try:
zbss = Sale_item_info_soup.find('div', class_='main-item').find('ul', class_='sheshi_zb').findAll('li')
title = [i.span.get_text() for i in zbss]
text = [i.get_text().split(',') for i in zbss]
mydict = dict(zip(title, text))
for i, k in mydict.items():
print('{0}: {1}'.format(i, k[0]))
# 中小学
if i == '中小学' or '学校':
Item_near_school = k[0]
# 大学
if i == '大学':
Item_near_university = k[0]
# 邮政
if i == '邮政':
Item_near_postoffice = k[0]
# 综合商场
if i == '综合商场':
Item_near_market = k[0]
# 银行
if i == '银行':
Item_near_bank = k[0]
# 交通
if i == '交通':
Item_near_bus = k[0]
# 其他
if i == '其他':
Item_near_other = k[0]
# 小区内部配套
if i == '小区内部配套':
Item_near_matching = k[0]
# 幼儿园
if i == '幼儿园':
Item_near_kindergarten = k[0]
# 医院
if i == '医院':
Item_near_hospital = k[0]
except AttributeError as e:
print('周边设施信息提取失败')
####小区规划
#定义小区规划变量
Item_plan_area='' # 占地面积
Item_plan_buildarea = '' # 建筑面积
Item_plan_rjl = '' # 容积率
Item_plan_lhl = '' # 绿化率
Item_plan_cararea = '' # 停车位
Item_plan_ldzs = '' # 楼栋总数
Item_plan_zhs = '' # 总户数
Item_plan_wygs = '' # 物业公司
Item_plan_wyf = '' # 物业费
Item_plan_wyfinfo = '' # 物业费描述
Item_plan_lczk = '' # 楼层状况
####价格信息
#定义价格信息变量
####项目简介
Item_brief_introduction=''
##开发商,这个数据提取可能存在问题,需要测试。
# Item_company_info=Sale_item_info_soup.find(string="开发 商").find_parents("a").text
# print(Item_company_info)
#
##项目特色
# Item_feature=Sale_item_info_soup.find(string="项目特色:").find_parents("span").text
####楼盘价格走势
# Sale_item_trend=soup.find('div', id="orginalNaviBox").find('a',id='xfdsxq_B03_11').get('href')
####二手房链接
# Sale_item_ershou=soup.find('div', id="orginalNaviBox").find('a',id='xfdsxq_B03_13').get('href')
# 提取页面中所需的关键信息,并进行定义
# soup.find('a', id="allUrl")
Download_Newitem_List(page)
Download_item_link('qd')
Download_item_info(City_Name)
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/686500/a_reptile_in_the_house.git
git@gitee.com:686500/a_reptile_in_the_house.git
686500
a_reptile_in_the_house
房天下爬虫
master

搜索帮助