python爬取58同城租房信息_python爬虫:找房助手V1.0-爬取58同城租房信息(示例代码)...
#!/usr/bin/python
# -*- encoding:utf-8 -*-importrequests
frombs4 importBeautifulSoup
frommultiprocessing.dummy importPool asThreadPool
importre
importdatetime
importsys
# from datetime import datetimereload(sys)
sys.setdefaultencoding(‘utf-8‘)
#得到soup,因后文通用,直接放这儿就行了defurlBS(url):
response=requests.get(url)
response.encoding = ‘utf-8‘soup =
BeautifulSoup(response.text,"lxml")
returnsoup
#通过交互的方式让搜索人输入想要的房屋条件,不输的话有默认值defget_source_url():
base_url=‘http://cd.58.com/zufang/‘#首先,锁定为整租:/zufang/,然后限定为个人房源:/0/,0为个人,1为经纪人# real_url=‘http://cd.58.com/zufang/?isreal=true‘try:
source_key=input(‘请按序号输入你想要的房屋来源,1为不限,2为个人房源,3为经纪人(默认为2个人房源):\n‘)
except:
source_key=2
source_from={1:‘‘,2:‘0/‘,3:‘1/‘} # 4:‘?isreal=true‘,4为诚信房源专区‘try:
price_min=str(input(‘请输入你期望的价格下限(不输默认为500):\n‘))
except:
price_min=‘500‘try:
price_max=str(input(‘请输入你期望的价格上限(不输默认为1000):\n‘))
except:
price_max=‘1000‘price=‘minprice=‘+price_min+‘_‘+price_max
try:
room_key=input(‘请输入你想要的房子间数:0为不限,1为1室,2为2室,3为3室,4为4室,5为4室以上(不输默认为1室):\n‘)
except:
room_key=1
room_num={0:‘‘,1:‘j1/‘,2:‘j2/‘,3:‘j3/‘,4:‘j4/‘,5:‘j5/‘}
key_words=raw_input(‘请输入你想要搜索的其他关键词,如小区名称,地铁位置等(不输默认为空):\n‘)
source_url=base_url+source_from[source_key]+room_num[room_key]+‘?‘+price+‘&key=‘+key_words
# print new_urlreturnsource_url
#
new_url=‘http://cd.58.com/zufang/0/j1/?minprice=600_800&PGTID=0d300008-0006-6cd9-6ba7-a7672ec996c3&ClickID=3‘
#找到下一页的地址,因为58的网站很坑,它并没有显示共多少页,所以只能通过爬取他的下一页对应的href来得到下一页的链接#但是,更坑的是,他的页面进去后第一次的下一页按了后和当前页是一样的,所以我就在确定有下一页的情况下,直接用当前页+1得到下一页的urldefget_new_list(source_url):
new_url=source_url
new_url_list=[new_url]
whileTrue:
soup=urlBS(new_url)
cp=re.compile(r‘/pn(.)/‘)
finder=soup.find(‘a‘,{‘class‘:‘next‘})
iffinder:
next_url=finder[‘href‘]
now_page=cp.findall(source_url)
next_page=‘http://cd.58.com‘+next_url
ifnow_page:
now_page=now_page[0]
newpage=str(int(now_page)+1)
new_page=cp.sub(newpage,next_page)
else:
now_page=‘1‘newpage=‘2‘new_page=‘http://cd.58.com‘+next_url
new_url=new_page
else:
new_page=‘‘break# else:
# print ‘dont have next page‘
# print new_urliflen(new_url_list)==1:
new_url_list.append(new_url)
elifnew_page==new_url_list[-1]:
break
else:
new_url_list.append(new_url)
new_url_listreturnnew_url_list
#得到房屋信息页的链接defget_house_url(new_url):
soup = urlBS(new_url)
href_list=soup.select(‘div[class="img_list"] a‘)
house_url_list=[]
foreach inhref_list:
href=each[‘href‘]
#print hrefhouse_url_list.append(href)
returnhouse_url_list
#爬取房屋信息,同时不要那些骗子的信息,以及一个月前更新的信息defhouse_info(house_url):
#
house_url=‘http://cd.58.com/zufang/26364594760504x.shtml?version=A&psid=162154127192148068945806804&entinfo=26364594760504_0‘
#
print house_urlsoup=urlBS(house_url)
try:
tel=soup.find(‘span‘,{‘class‘:‘tel-num tel-num-geren pl30 f30‘}).text #个人房源except:
tel=soup.find(‘span‘,{‘class‘:‘tel-num pl30 f30‘}).text #中介match_tel=re.search(r‘^1\d{5}.*‘,tel) #排除所有电话号码以0开始的人,即留固定电话的人,因为我们认为,固定房源的人是不会留固定电话的situation=soup.find(‘div‘,{‘class‘:‘description-content‘}).text.strip()
# print situationmatch_si=re.search(u‘(我是房东|男士勿扰|男生勿扰|限女生|微信|男士|男性|男生|女性|女的|姐妹|"+")‘,situation)
#更新时间update_time=soup.find(‘span‘,{‘class‘:‘pl10‘}).text
update_date = datetime.datetime.strptime(update_time.replace(‘更新时间:‘,‘‘), "%Y-%m-%d").date()
thirtyDayAgo=datetime.date.today() +
datetime.timedelta(days=-30)
day_line=(update_date -
thirtyDayAgo).days
if notmatch_tel: #认为隐藏了电话号码的,电话号码以0开始的,都是骗子,不要他# print ‘电话号码有问题,骗子‘pass
elifmatch_si: #认为含有某些字的全部为骗子,把这些排除掉# print ‘内容有问题,骗子‘pass
elifday_line<0: #取近30天更新的数据,时间太长了的数据没啥意义# print ‘已经是一个月之前的消息了‘pass
else:
printhouse_url
printsituation
printtel
#标题title=soup.find(‘h1‘,{‘class‘:‘main-title
font-heiti‘}).text
printtitle
#价格p=re.compile(r‘\n|\t|\r| ‘)
rent_price=soup.find(‘i‘,{‘class‘:‘ncolor‘}).text
price=p.sub(‘‘,rent_price)
printprice
#房屋大小house=soup.find_all(‘li‘,{‘class‘:‘house-primary-content-li
clearfix‘})
house_content=p.sub(‘‘,house[0].text)
printhouse_content
#小区try:
house_Community=p.sub(‘‘,house[1].text)
except:
house_Community=‘‘printhouse_Community
#位置try:
house_place=p.sub(‘‘,house[2].text)
except:
house_place=‘‘printhouse_place
#设施try:
facility=soup.find(‘li‘,{‘class‘:‘house-primary-content-li
clearfix person-config‘})
facility=p.sub(‘‘,facility.text)
except:
facility=‘‘printfacility
#联系人contact=soup.find(‘li‘,{‘class‘:‘house-primary-content-li
clearfix person-contact‘}).text
contact=p.sub(‘‘,contact)
printcontact
printupdate_time+‘\n\n\n‘#
a=[house_url,price,house_content,house_Community,house_place,title,situation,facility]f.write(‘----------------------------------------------------------------------------------\n‘)
f.write(house_url+‘\n‘+price+‘\n‘+house_content+‘\n‘+house_Community+‘\n‘+house_place+‘\n‘+title+‘\n‘+situation+‘\n‘+facility+‘\n\n‘)
if__name__==‘__main__‘:
source_url=get_source_url()
printsource_url
#
source_url=‘http://cd.58.com/zufang/0/?minprice=500_1500&key=四河‘get_new_list=get_new_list(source_url)
get_new_listf=open("house_rent.txt", "w")
#先清空,然后再打开,再写入,写入时的方式是a(追加)
# f.truncate()
# f.close()
#
# f=open("house_rent.text",
"a")print‘正在下载,请稍候。。。\n\n‘# pool =
ThreadPool(4)fornew_url inget_new_list:
new_url=new_url.encode(‘utf-8‘).decode(‘utf-8‘)
# print new_urlhouse_url_list=get_house_url(new_url)
house_url_listforeach inhouse_url_list: #本来打算使用多线程,但是总是会报:‘module‘ object has no attribute ‘_strptime‘这个奇怪的错误,挣扎了许久,放弃house_info(each)
# results = pool.map(house_info,
house_url_list)
# pool.close()
# pool.join()f.close()
python爬取58同城租房信息_python爬虫:找房助手V1.0-爬取58同城租房信息(示例代码)...相关推荐
- python爬虫:找房助手V1.0-爬取58同城租房信息
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
- python爬取58同城所有租房信息_python爬虫:找房助手V1.0-爬取58同城租房信息
#!/usr/bin/python # -*- encoding:utf-8 -*-importrequests frombs4 importBeautifulSoup frommultiproces ...
- python 接入百度地图数据包下载_Python爬虫-利用百度地图API接口爬取数据并保存至MySQL数据库...
首先,我这里有一份相关城市以及该城市的公园数量的txt文件: 分析-02.png 其次,利用百度地图API提供的接口爬取城市公园的相关信息. 所利用的API接口有两个: 1.http://api.ma ...
- python写爬虫4-多线程爬虫(采集58出租房信息)_python爬虫 爬取58同城上所有城市的租房信息详解...
代码如下 from fake_useragent import UserAgent from lxml import etree import requests, os import time, re ...
- python视频行人检测_python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
参照opencv官网例程写了一个基于python的行人检测程序,实现了和自带检测器基本一致的检测效果. opencv版本:3.4.0 训练集和opencv官方用了同一个,可以从http://pasca ...
- 利用python爬取租房信息_Python爬虫实战(1)-爬取“房天下”租房信息(超详细)
#前言html 先看爬到的信息:python 今天主要用到了两个库:Requests和BeautifulSoup.因此我先简单的说一下这两个库的用法,提到的都是此文须要用到的.编程 #Requests ...
- python爬虫抓取信息_python爬虫爬取网上药品信息并且存入数据库
我最近在学习python爬虫,然后正好碰上数据库课设,我就选了一个连锁药店的,所以就把网上的药品信息爬取了下来. 1,首先分析网页 2,我想要的是评论数比较多的,毕竟好东西大概是买的人多才好.然后你会 ...
- python爬虫scrapy爬取新闻标题及链接_python爬虫框架scrapy爬取梅花网资讯信息
原标题:python爬虫框架scrapy爬取梅花网资讯信息 一.介绍 本例子用scrapy-splash爬取梅花网(http://www.meihua.info/a/list/today)的资讯信息, ...
- python爬取豆瓣电影信息_Python爬虫入门 | 爬取豆瓣电影信息
这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬 ...
最新文章
- 东北大米为何如此好吃
- WebMatrix 3发布了!
- dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire
- mdx词典包_推荐几款实用的英语词典
- Saving Beans HDU - 3037(卢卡斯定理)
- 网页排版规则:你需要知道的
- C++之父Bjarne Stroustrup:程序员在数学上付出的努力,永远也不会白费
- 利用 mount 指令解决 Read-only file system的问题
- 单幅RGB图像+Depth深度图得到点云模型示例
- 业务流程图绘制方法经验谈(上篇)
- LabVIEW编程LabVIEW控制MMC-100位移台例程与相关资料
- 免费域名邮箱申请教程
- html5拆红包源码,最新1月拆红包源码强制分享朋友圈分享群防封裂变红包游戏
- python-return_全局局部变量_函数名用法_函数嵌套
- shape()函数的用法
- Unity中如何跟随某个物体运动浅谈
- Idc数据中心是什么?数据中心专业术语你知多少?
- 学计算机cpu重要还是显卡重要,显卡处理器和内存 吃鸡时哪个最重要?
- 数组面试题-大力出奇迹?
- 【系统集成项目管理工程师】—关键路径