【python爬虫专项(29)】链家二手房源数据采集2(深度信息采集)(python爬取二手房信息)

网友投稿 257 2022-08-25


【python爬虫专项(29)】链家二手房源数据采集2(深度信息采集)(python爬取二手房信息)

链家二手房源数据深度采集

这部分的实践是基于上一个博客获得的数据,具体的​​参考网址​​如下:

爬虫逻辑 :【提取mongo里面的具体网页的链接】–> 【设置动态ip】–> 【获取详细信息】

函数式编程:

函数1:url_extract(database,table,field) → 【数据网页url提取】函数          database:数据库          table:源数据mongo集合对象          field:url字段

函数2:get_data(ui,d_h,ips,table) → 【数据采集及mongo入库】函数          ui:数据信息网页          d_h:user-agent信息          ips:代理设置          table:mongo集合对象

前期准备并封装第一个函数

上一个博客已经完成了分页中各个列表里面标题所对应的url(链接)采集,这里只需要加载一下即可

导入相关库、代码分区和配置数据库

import reimport requestsimport timefrom bs4 import BeautifulSoupimport pymongoif __name__ == '__main__': myclient = pymongo.MongoClient("mongodb://localhost:27017/") db = myclient['链家二手房_1'] datatable = db['data_1']

数据提取

dlst = datatable.find()print(dlst)print(dlst[0])

输出结果为:(dlst是一个可以迭代的对象,这里取出第一个元素示例)

3) 封装第一个函数

def url_extract(database,table,field): '''【数据网页url提取】函数 database:数据库 table:源数据mongo集合对象 field:url字段 ''' dlst = table.find() lst = [] for item in dlst: lst.append(item[field]) return lst urllst = url_extract(db,datatable,'链接')[:10]print(urllst)

输出结果为:(网页均可以打开)

​[‘​​​​‘​​​​‘​​​​‘​​​​‘​​​​‘​​​​= url_extract(db,datatable,'链接')[:10]u = urllst[0]r = requests.get(u,headers = dic_headers, cookies = dic_cookies)soup = BeautifulSoup(r.text, 'lxml')dic = {}dic['标题'] = soup.h1.textprice = soup.find('div', class_="price").textdic['总价_万'] = re.search(r'(\d+)万', price).group(1)dic['单价_元'] = re.search(r'(\d+)元', price).group(1)base_info = soup.find('div', class_="base").find('ul').find_all('li')for li in base_info: st = re.split(r'<.*?>',str(li)) dic[st[2]] = st[3] transaction_info = soup.find('div', class_="transaction").find('ul').find_all('li')for li in transaction_info: st = re.split(r'<.*?>',str(li)) dic[st[2]] = st[4].replace('\n','').replace(' ','') loc = re.search(r"resblockPosition:'([\d.]+),([\d.]+)'",r.text)dic['lng'] = loc.group(1)dic['lat'] = loc.group(2)print(dic)

输出的结果为:

封装第二个函数及输出可视化

关于base_info和transaction_info获取的过程有点难度

def get_data(ui,d_h,d_c,ips,table): ''' 【数据采集及mongo入库】函数 ui:数据信息网页 d_h:user-agent信息 ips:代理设置 table:mongo集合对象 ''' r = requests.get(ui,headers = d_h, cookies = d_c) soup = BeautifulSoup(r.text, 'lxml') dic = {} dic['标题'] = soup.h1.text price = soup.find('div', class_="price").text dic['总价_万'] = re.search(r'(\d+)万', price).group(1) dic['单价_元'] = re.search(r'(\d+)元', price).group(1) base_info = soup.find('div', class_="base").find('ul').find_all('li') for li in base_info: st = re.split(r'<.*?>',str(li)) dic[st[2]] = st[3] transaction_info = soup.find('div', class_="transaction").find('ul').find_all('li') for li in transaction_info: st = re.split(r'<.*?>',str(li)) dic[st[2]] = st[4].replace('\n','').replace(' ','') loc = re.search(r"resblockPosition:'([\d.]+),([\d.]+)'",r.text) dic['lng'] = loc.group(1) dic['lat'] = loc.group(2) table.insert_one(dic)

最后的可视化代码如下

urllst = url_extract(db,datatable,'链接')[:100]errorlst = []count = 1for u in urllst: print("程序正在休息......") time.sleep(5) try: get_data(u,dic_headers,dic_cookies,'a', datatable2) print(f'成功采集{count}条数据') count += 1 except: errorlst.append(u) print('数据采集失败,网址为:',u)

输出结果:

数据库中的数据


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【python爬虫专项(9)】哪吒之魔童降世影片的海报爬取
下一篇:【python科研绘图】封装接口直接利用DataFrame绘制百分比堆叠柱状图(python dataframe 画图)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~