爬取链家网二手房数据,python爬取链家数据
【python爬虫专项(28)】链家二手房源数据采集1(分页信息采集)_wx62cb940602a10的技术博客_博客
链家二手房源信息采集这里以采集北京二手房源为例,要进行获取的字段如下
爬虫逻辑:【分页全球资源定位器(统一资源定位器)获取】 【页面列表数据的获取】函数式编程:
函数1:get_urls(city_url,n) 【分页网页全球资源定位器(统一资源定位器)获取】函数
城市网址:不同城市起始网址
n:页数参数
函数2:get_data(ui,d_h,table) 【数据采集及蒙戈入库】函数
用户界面:数据信息网页
用户代理信息
表格:蒙哥集合对象
前期准备及封装第一个函数导入库和代码分区导入请求
导入时间
从bs4导入美丽的声音
导入安装
if __name__==__main__ :查找分页全球资源定位器(统一资源定位器)规律
一般查找该页面下面的2-4页即可U2=https://bj.lianjia.com/ershoufang/pg2/
u3=https://bj.lianjia.com/ershoufang/pg3/
U4=https://bj.lianjia.com/ershoufang/pg4/
.封装第一个函数,返回分页全球资源定位器(统一资源定位器)列表def get_urls(city_url,n):
【分页网页全球资源定位器(统一资源定位器)获取】函数
城市网址:不同城市起始网址
n:页数参数
lst=[]
对于范围(1,^北部1)中的我:
lst.append(city_url fpg{i}/)
返回地表温度
print(get _ URLs( https://bj。贾立安。com/尔寿芳/,5))输出结果为:
https://北京。贾立安。com/er shou Fang/pg1/,
https://bj.lianjia.com/ershoufang/pg2/,
https://bj.lianjia.com/ershoufang/pg3/,
https://bj.lianjia.com/ershoufang/pg4/,
https://北京。贾立安。com/二手房/pg5/]
向网站发送请求在获取网址后要检测一下是否可以进行数据的获取,以第一个页面的全球资源定位器(统一资源定位器)为例(记得提前配置好头球和饼干),代码如下
DIC _ headers={ User-Agent : Mozilla/5.0(Windows NT 10.0;win 64x 64)apple WebKit/537.36(KHTML,像壁虎一样)Chrome/75。0 .3770 .100 Safari/537.36 }
cookies= TY _ SESSION _ ID=a 63 a5c 48-ee8a-411 b-b774-82b 887 a 09 de 9;贾立安_ uuid=1e 4 ed 8 AE-d689-4d 12-a788-2e 93397646 FD;_ SMT _ uid=5 DBC ff 46.49 fdcd 46;UM _ distinct id=16e 2 a 452 be 0688-0 c 84653 AE 31 a 8-e 343166-1fa 400-16e 2 a 452 be 1 b 5b;_ jzqy=1.1572667207.1572667207.1。jzqsr=Baidu jzqct=链家。-;_ ga=ga 1。2 .1275958 .4667676767676 _ jzqx=1.1572671272.1572671272.1。jzqsr=sh。贾立安。com jzqct=/er shou Fang/pg2l 1/.-;select _ city=310000贾立安_ ssid=a2a 11 c0a-c451-43aa-879 e-0d 202 a 663 a 5d;hm _ lvt _ 9152 f 8221 CB 6243 a 53 c 83 b 956842 be8a=1582085114;cnzz数据1253492439=1147125909-1572665418-https % 3A % 2F % 2 FSP 0。百度一下。com % 2F 1582080390;cnzz数据1254525948=626340744-1572665293-https % 3A % 2F % 2 FSP 0。百度一下。com % 2F 1582083769;cnzz数据1255633284=176672440-1572665274-https % 3A % 2F % 2 FSP 0。百度一下。com % 2F 1582083985;cnzz数据1255604082=1717363940-1572665282-https % 3A % 2F % 2 FSP 0。百度一下。com % 2F 1582083899;传感器数据2015 jssdkcross={ " distinct _ id ":" 16e 2 a 452d 07 c 03-0d 376 ce 6817042-e 343166-2073600-16e 2 a 452d 08 ab 2 "," $ device _ id ":" 16e 2 a 452d 07 c 03-0d 376 ce 6817042-e 343166-2073600直接流量"," $ latest _ referer ":" "," $ latest _ referrer _ host ":" "," $latest_search_keyword ":"未取到值_直接打开"、" $latest_utm_source ":"百度"、" $latest_utm_medium ":"拼转"、" $latest_utm_campaign ":"搜搜"、" $ latest _ UTM _内容":"标题妙书"、" $latest_utm_term ":"标体" } };_ qzjc=1;_ jzqa=1.941285633448461200.157266767.157266 _ jzqc=1;_ jzqckmp=1;_ GID=ga 1。2 .18540 1981 .165854854851 hm _ lpvt _ 9152 f 8221 CB 6243 a 53 c 83 b 956842 be8a=1582085295;_ qzja=1.476033730。1572671272043.1582085116087.1582082085 13403.1582085 29534 .0 .0 .0 .14 .3;_ qzjb=1.1582085116087。4 .0 .0 .0;_ qzjto=4。1 .0;_jzqb=1.4.10.1582085116.1
dic_cookies={}
对于饼干。分开中的我(;)):
DIC _ cookies[I . split(=)[0]]=I . split(=)[1]
r=请求。get( https://bj。贾立安。com/ershoufang/pg1/,headers=dic_headers,cookies=dic_cookies)
打印(r)输出结果为:(当结果返回200时候,说明网页可以正常进行数据获取)
回应【200】
查找每个字段对应的标签并获取数据这里以第一页的第一个表单里包含的信息进行查找试错,如下
标题字段对应的标签
地址对应的标签
详情对应的标签
关注及发布时间对应的标签
总价和单价对应的标签
获取标签内容r=请求。get( https://bj。贾立安。com/ershoufang/pg1/,headers=dic_headers,cookies=dic_cookies)
soup=BeautifulSoup(r.text, lxml )
dic={}
dic[标题]=soup.find(div ,class_=title).a.text
info1=soup.find(div ,class_=positionInfo )。文本
dic[小区]=info1.split( - )[0]
dic[地址]=info1.split( - )[1]
info2=soup.find(div ,class_=houseInfo ).文本
dic[户型]=info2.split( )[0]
dic[面积]=info2.split( )[1]
dic[朝向]=info2.split( )[2]
dic[装修类型]=info2.split( )[3]
dic[楼层]=info2.split( )[4]
dic[建筑完工时间]=info2.split( )[5]
dic[是否为板房]=info2.split( )[6]
info3=soup.find(div ,class_=followInfo )。文本
dic[关注量]=info3.split(/)[0]
dic[发布时间]=info3.split(/)[1]
dic[总价]=soup.find(div ,class_=totalPrice ).文本
dic[单价]=soup.find(div ,class _=单价)。文字。替换(单价,)
dic[链接]=soup.find(div ,class_=title ).一个[href]
打印(驾驶员信息中心)输出结果为:
封装第二个函数在进行试错无误后,就可以进行函数的封装
配置数据库myclient=pymongo .MongoClient( MongoDB://localhost:27017/)
db=myclient[链家二手房_1]
datatable=db[data_1]
#datatable.delete_many({})如果该表格下有数据的话可以使用这条语句封装函数def get_data(ui,d_h,d_c,table):
【数据采集及蒙戈入库】函数
用户界面:数据信息网页
用户代理信息
表格:蒙哥集合对象
ri=requests.get(ui,headers=d_h,cookies=d _ c)
soupi=BeautifulSoup(ri.text, lxml )
lis=soupi.find(ul ,class_=sellListContent ).查找全部(李)
n=0
李斯对李说:
dic={}
dic[标题]=li.find(div ,class_=title ).文本
info1=li.find(div ,class_=positionInfo ).文本
dic[小区]=info1.split( - )[0]
dic[地址]=info1.split( - )[1]
info2=li.find(div ,class_=houseInfo ).文本
dic[户型]=info2.split( )[0]
dic[面积]=info2.split( )[1]
dic[朝向]=info2.split( )[2]
dic[装修类型]=info2.split( )[3]
dic[楼层]=info2.split( )[4]
dic[建筑完工时间]=info2.split( )[5]
dic[是否为板房]=info2.split( )[6]
info3=li.find(div ,class_=followInfo ).文本
dic[关注量]=info3.split(/)[0]
dic[发布时间]=info3.split(/)[1]
dic[价钱]=li.find(div ,class_=totalPrice ).文本
dic[每平米价钱]=li.find(div ,class_=unitPrice ).文本
dic[房间优势]=li.find(div ,class_=tag ).文本
dic[链接]=li.find(a)[href]
table.insert_one(dic)
n=1
返回可视化输出以及异常处理判断errorlst=[]
计数=0
对于urllst中的u:
打印(程序正在休息.)
时间。睡眠(5)
尝试:
count=get_data(urllst[0],dic_headers,dic_cookies,datatable)
打印(f 成功采集{count}条数据)
除了:
errorlst.append(u)
打印(数据采集失败,网址为:,u)输出的结果如下:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。