1. 首页
  2. 未分类

800万豪宅买不起?告诉你Python程序员买房的正确姿势

“u003Cdivu003Eu003Cp class=”ql-align-justify”u003EPython程序员如果买房,应当有一个自己收集房价数据,再进行数据分析的过程。我尝试了用47行代码下载网站的房价数据,并导出到可用EXCEL打开的CSV文件,填了许多坑,有兴趣的可以继续看啦。u003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003E先放上程序设计思路的简单的思维导图。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002F5e8abfd20bcf48e98327dd21e0bf12c1″ img_width=”1080″ img_height=”324″ alt=”800万豪宅买不起?告诉你Python程序员买房的正确姿势” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Ch1 class=”ql-align-justify”u003Eu003Cstrongu003E发现有很多想要学习Python却不知道如何下手的朋友,我这里整理了一些关于Python的学习资料,从基础到入门到实战都有!有需要的朋友可以关注并私信“01”免费获取…u003Cu002Fstrongu003Eu003Cu002Fh1u003Eu003Cp class=”ql-align-justify”u003Eu003Cstrongu003E获取网页内容u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003E1、导入requests库。 u003Cu002Fpu003Eu003Cpre class=”ql-align-justify”u003Eimport requestsu003Cbru003Eu003Cu002Fpreu003Eu003Cp class=”ql-align-justify”u003E2、设置参数u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F7581bb27747642768d103e431d413da3″ img_width=”754″ img_height=”158″ alt=”800万豪宅买不起?告诉你Python程序员买房的正确姿势” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E用for循环进行代码实现。(为了减轻服务器的负载,翻页之前要暂停5秒钟):u003Cu002Fpu003Eu003Cpre class=”ql-align-justify”u003Efor i in range(1,3): u003Cbru003E link=’https:u002Fu002Fguangzhou.anjuke.comu002Fsaleu002Fdongchuanu002Fp’+str(i)+r’u002F#filtersort’u003Cbru003E import timeu003Cbru003E time.sleep(5)u003Cbru003E print (‘page’+str(i))u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E2) 定制请求头:u003Cu002Fpu003Eu003Cpu003E有的网站,如果没有定制请求头,在网络爬取数据时,就不返回正确的结果。u003Cu002Fpu003Eu003Cpu003E在Google Chrome浏览器中,点击“视图—开发者—开发者工具”,打开开发者工具视图。在地址栏输入网址并且按回车键,在开发者工具视图中,单击“Network”选项,单击左边Namer的方框中找到请求的网页,,在右边的Headers方框中,可以找到Response Headers的详细信息,其中可以找到Request Headers的详细信息,再找到user-agent的详细信息:Mozillau002F5.0 (Linux; Android 6.0; Nexus 5 Buildu002FMRA58N)AppleWebKitu002F537.36 (KHTML, like Gecko) Chromeu002F67.0.3396.87 Mobile Safariu002F537.36复制并粘贴到代码中。u003Cu002Fpu003Eu003Cpre class=”ql-align-justify”u003Eheaders={‘User-Agent’:’Mozillau002F5.0(Macintosh; Intel Mac OS X 10_12_6) AppleWebKitu002F537.36 (KHTML, like Gecko)Chromeu002F67.0.3396.79 Safariu002F537.36′}u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E3)自定义等待超时时间u003Cu002Fpu003Eu003Cpu003E有时服务器长时间不响应,爬虫程序会一直等待。为解决此问题,可以设定timeout的参数值,意思是如果服务器在设定的秒数内不应答,就返回异常。u003Cu002Fpu003Eu003Cpre class=”ql-align-justify”u003Etimeout=20u003Cbru003Eu003Cu002Fpreu003Eu003Cp class=”ql-align-justify”u003E3、使用requests库来发送http请求。u003Cu002Fpu003Eu003Cpre class=”ql-align-justify”u003Er=requests.get(link,headers=headers,timeout=20)u003Cbru003Eu003Cu002Fpreu003Eu003Cp class=”ql-align-justify”u003Eu003Cstrongu003E解析网页数据u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003E1、导入BeautifulSoup库,并且用lxml HTML解析器。u003Cu002Fpu003Eu003Cpre class=”ql-align-justify”u003Efrom bs4 import BeautifulSoupu003Cbru003Esoup=BeautifulSoup(r.text,’lxml’)u003Cbru003Eu003Cu002Fpreu003Eu003Cp class=”ql-align-justify”u003E2、查看网页源代码,并定位网页各个元素所在的地址。u003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003E在Google Chrome浏览器中,点击“视图—开发者—开发者工具”,打开开发者工具视图,单击左上角的“Select an element in the page to inspect it“,u003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003E1)取得多条房屋数据:u003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003E再用鼠标移到某条房屋数据旁边,会提示 ”li.list-item“然后在开发者工具视图中,找到”Elements“选项卡,可以查看对应的html代码<li data-from=””> <u002Fli>u003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003E用find_all函数编码如下:u003Cu002Fpu003Eu003Cpre class=”ql-align-justify”u003Ehouse_list=soup.find_all(‘li’,class_=”list-item”)u003Cbru003Eu003Cu002Fpreu003Eu003Cp class=”ql-align-justify”u003E2) 取得房屋的明细数据u003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003E用上述方法,分别提取各项房屋明细数据u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002Fdc3b27bd6098434db5e8f48458fd7799″ img_width=”722″ img_height=”563″ alt=”800万豪宅买不起?告诉你Python程序员买房的正确姿势” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Fb34a3863b0ac4c31a4cac47ec1e86b4b” img_width=”699″ img_height=”607″ alt=”800万豪宅买不起?告诉你Python程序员买房的正确姿势” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cp class=”ql-align-justify”u003Eu003Cstrongu003E把数据存入二维列表u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003E1、 把同一个房屋的明细数据,加入一条字典,并且显示在屏幕上。(每条字典记录,对应一条房屋数据。)u003Cu002Fpu003Eu003Cpre class=”ql-align-justify”u003Edic={‘house_name’:housename,’total_price’:totalprice,’unit_price’:unitprice,’no_of_rooms’:noofroom,’house_area’:housearea,’house_floor’:housefloor,’hourse_year’:houseyear,’house_broker’:housebroker,’house_address’:houseaddress,’hourse_tag’:housetags}u003Cbru003Eprint (dic)u003Cbru003Eu003Cu002Fpreu003Eu003Cp class=”ql-align-justify”u003E2、 把每条房屋数据(就是每个字典记录)加入到房屋列表中u003Cu002Fpu003Eu003Cpre class=”ql-align-justify”u003Ecsv_house_list=[]u003Cbru003Ecsv_house_list.append(dic)u003Cbru003Eu003Cu002Fpreu003Eu003Cp class=”ql-align-justify”u003Eu003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003Eu003Cstrongu003E把列表u003Cu002Fstrongu003Eu003Cstrongu003E倒出u003Cu002Fstrongu003Eu003Cstrongu003E到CSV文件u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003E1、 引入pandas模块u003Cu002Fpu003Eu003Cpre class=”ql-align-justify”u003Eimport pandas as pdu003Cbru003Eu003Cu002Fpreu003Eu003Cp class=”ql-align-justify”u003E2、 用列表生成pandas模块中的dataframe对象u003Cu002Fpu003Eu003Cpre class=”ql-align-justify”u003Edf = pd.DataFrame(csv_house_list) u003Cbru003Eprint (df)u003Cbru003Eu003Cu002Fpreu003Eu003Cp class=”ql-align-justify”u003E3、 通过dataframe对象中的to_csv方法导出csv文件u003Cu002Fpu003Eu003Cpre class=”ql-align-justify”u003E df.to_csv(“house_list.csv”,encoding=”utf-16″,sep=”\t”)u003Cbru003Eu003Cu002Fpreu003Eu003Cp class=”ql-align-justify”u003Eu003Cstrongu003E完整的Python源代码,共47行u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpre class=”ql-align-justify”u003E#!u002Fusru002Fbinu002Fenv python3u003Cbru003E# -*- coding: utf-8 -*-u003Cbru003E”””u003Cbru003ECreated on Sat Jun 9 06:12:38 2018u003Cbru003E@author: wupengu003Cbru003E”””u003Cbru003Eimport requestsu003Cbru003Eimport timeu003Cbru003Efrom bs4 import BeautifulSoupu003Cbru003Eimport pandas as pdu003Cbru003Eheaders={‘User-Agent’:’Mozillau002F5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKitu002F537.36 (KHTML, like Gecko) Chromeu002F67.0.3396.79 Safariu002F537.36′}u003Cbru003Ecsv_house_list=[]u003Cbru003Efor i in range(1,3):u003Cbru003E link=’https:u002Fu002Fguangzhou.anjuke.comu002Fsaleu002Fdongchuanu002Fp’+str(i)+r’u002F#filtersort’u003Cbru003E r=requests.get(link,headers=headers,timeout=20)u003Cbru003E soup=BeautifulSoup(r.text,’lxml’)u003Cbru003E house_list=soup.find_all(‘li’,class_=”list-item”)u003Cbru003E for house in house_list:u003Cbru003E housename=house.find(‘div’,class_=”house-title”).a.string.strip()u003Cbru003E totalprice=house.find(‘span’,class_=”price-det”).get_text()u003Cbru003E unitprice=house.find(‘span’,class_=”unit-price”).get_text()u003Cbru003E noofroom=house.find(‘div’,class_=”details-item”).span.string.strip()u003Cbru003E housearea=house.find(‘div’,class_=”details-item”).contents[3].string.strip()u003Cbru003E housefloor=house.find(‘div’,class_=”details-item”).contents[5].string.strip()u003Cbru003E houseyear=house.find(‘div’,class_=”details-item”).contents[7].string.strip()u003Cbru003E housebroker=house.find(‘span’,class_=”brokername”).get_text()u003Cbru003E housebroker=housebroker.replace(‘\\ue147’,”)u003Cbru003E houseaddress=house.find(‘span’,class_=”comm-address”).get_text()u003Cbru003E houseaddress=houseaddress.replace(‘\\xa0’,”)u003Cbru003E houseaddress=houseaddress.replace(‘\n’,”)u003Cbru003E houseaddress=houseaddress.replace(‘ ‘,”)u003Cbru003E housetaglist=house.find_all(‘span’,class_=’item-tags’)u003Cbru003E housetags=[i.get_text() for i in housetaglist] u003Cbru003E dic={‘house_name’:housename,’total_price’:totalprice,’unit_price’:unitprice,’no_of_rooms’:noofroom,’house_area’:housearea,’house_floor’:housefloor,’hourse_year’:houseyear,’house_broker’:housebroker,’house_address’:houseaddress,’hourse_tag’:housetags}u003Cbru003E print (dic)u003Cbru003E csv_house_list.append(dic)u003Cbru003E time.sleep(5)u003Cbru003E print (‘page’+str(i))u003Cbru003Edf = pd.DataFrame(csv_house_list) u003Cbru003Eprint (df)u003Cbru003Edf.to_csv(“house_list.csv”,encoding=”utf-16″, sep=”\t”)u003Cbru003Eu003Cu002Fpreu003Eu003Cp class=”ql-align-justify”u003Eu003Cstrongu003E曾经踩过的坑u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003E1、数据排列混乱u003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003E刚开始曾发现有数据排列混乱的现象,这一行的数据排到上一行去了。经过排查,发现原因是,最早使用列表来收集各个房屋的明细数据,但是有的明细数据是空值,后面的明细数据就会占据了原来空值部分的明细数据的位置,于是就乱套了。解决方法是,用字典而不是列表来收集房屋明细数据,通过字典的key-value匹配的方式,再也不担心空值数据的位置被下个数值占据的问题了。u003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003E2、CSV文件乱码u003Cu002Fpu003Eu003Cp class=”ql-align-justify”u003E曾经试过导出到CSV文件乱码的现象,后来搜索得知,通过dataframe对象中的to_csv方法导出csv文件,需要把编码设为utf-16的格式,如果用默认的utf-8的编码就会乱码。u003Cu002Fpu003Eu003Cpre class=”ql-align-justify”u003Edf.to_csv(“house_list.csv”,encoding=”utf-16″,sep=”\t”)u003Cbru003Eu003Cu002Fpreu003Eu003Cu002Fdivu003E”

原文始发于:800万豪宅买不起?告诉你Python程序员买房的正确姿势

主题测试文章,只做测试使用。发布者:熱鬧獨處,转转请注明出处:http://www.cxybcw.com/18245.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code