html商品展⽰页⾯代码_基于python的链家⼩区房价爬取——
仅需60⾏代码
简介
⾸先打开相关⽹页(北京链家⼩区信息)。
注意本博客的代码适⽤于爬取某个城市的⼩区⼆⼿房房价信息。
log2foldchange值怎么解释如果需要爬取其他信息,可修改代码,链家的数据获取的基本逻辑都差不多。
效果展⽰
因为只需要60⾏左右的代码,所以就不写⼊excel了,直接在终端打印出来。
效果如下,为了展⽰美观我加了个json.dumps。
分析⽹页
⽤⾕歌浏览器打开北京链家⼩区信息,如果需要其他城市的可以直接替换。
⾸先可以看看我们要爬取的信息。我这次主要获取的有⼩区名、⼩区位置、房价。
spring festival作文6句话
进⼊页⾯后Ctrl+U查看⽹页源代码,在源代码界⾯Ctrl+F搜索⼩区名(也可以搜索其他的)先定位到相关的代码处。
经过简单的观察,我们就可以定位到我们所需要的所有信息(链家还是挺好爬取的……)。
可以看下图,该条⽬下我们所需的所有信息⼀下都被到了。
然后把前后的代码拷贝⼀下,经过⼀系列整理,得到我们要⽤到的正则规则。
# 正则表达式    # ⼩区名    name_rule = r'lianjia/xiaoqu/[0-9]*/" target="_blank">(.*?)' #[0-9]* 表⽰任意多个数字    .*? 匹配⼀次    name = re.findall(name_ru
(.*?)' price = re.findall(price_rule, html) # ⼩区所在区域 district_rule = r'class="district" >(.*?)' district = re.findall(district_rule, html) # ⼩区所在
商圈 bizcircle_rule = r'class="bizcircle" >(.*?) ' bizcircle = re.findall(bizcircle_rule, html)
核⼼问题已经轻松解决了,接下来可以在前⾯⽤request加上页⾯源代码的获取代码,这样才能实现爬⾍。
url = str(url)    html = (url).text # 获取页⾯原代码
好了,基本的分析已经完成了。
代码思路
前⽂中⽹页的分析已经完整了,核⼼的爬取思路已经有了。
接下来还需要完成的⼯作是:1. 实现爬⾍的⾃动化,⽐如说⾃⼰翻页啊什么的。2. 把爬取到的n个页⾯的数据整合并且整理展⽰出。
先把需要的库导⼊。这⾥⽤到json主要是为了⽤json.dumps美化数据的展⽰。
import requestsimport reimport timeimport json
⼀、⾸先我需要能够爬取单页的数据。
主要流程如下:输⼊相关的url,读取源代码,⽤正则表达式筛选我们需要的数据(⼩区名、房价、区域、商圈)、让数据⼀⼀对应(如果不⼀⼀
对应会打印“参数匹配失败”。
整个def最后返回⼀个字典,字典的key是⼩区名,字典的value是⼀个数组(包含了区域、商圈、房价信息)。
def get_housing_price(url):    url = str(url)    html = (url).text # 获取页⾯原代码    # 正则表达式    # ⼩区名    name_rule = r'lianjia/xiaoqu/[0-9]*/" t
(.*?)' price = re.findall(price_rule, html) # ⼩区所在区域 district_rule = r'class="district" >(.*?)' district = re.findall(district_rule, html) # ⼩区所在
商圈 bizcircle_rule = r'class="bizcircle" >(.*?) ' bizcircle = re.findall(bizcircle_rule, html) # 建⽴⼩区名和房价对应的字典 housing_price_dict
= {} if len(name) == len(price) == len(district) == len(bizcircle): for i in range(len(name)): infor = [] # 存放信息的列表 if price[i] != '暂⽆': #因为
存在暂⽆,把除了暂⽆房价数据以外的房价变成浮点型 floated = float(price[i]) else: floated = '暂⽆' infor.append(district[i])
infor.append(bizcircle[i]) infor.append(floated) housing_price_dict[name[i]] = infor # 遍历⽣成键值 else: print('参数匹配失败') return
housing_price_dict
⼆、遍历输⼊的n个页⾯,并且把n个页⾯获取的数据字典整合为⼀个。
上⾯已经写了爬取⼀个页⾯的def,现在要在上⾯def的基础上⾃动⽣成url并且爬取n个页⾯并且整合n个页⾯的数据。
⾸先先写⼀个合并两个字典的def放在这,等下⽤得着。continue只能用在循环语句中吗
mongodb与redis的区别
# 合并字典def merge_dict(dict1, dict2):    merged = {**dict1, **dict2}    return merged
然后写⼀个遍历页⾯的def,经过简单的观察切换页⾯只需要在原来的url后⾯+pg+数字就⾏。
下⾯这个def的思路是输⼊起始和中⽌页,⽤for遍历起始和中⽌页之间的所有页⾯,然后⽤⼀⾥⾯的def爬取每个单页的数据,最后把每个单
页得到的字典整合起来。
# 整合房价字典def merge_price_dict(start, end):    initial = {}    for pg in range(start, end+1): # 设置起始和中⽌界⾯        url = f'bj.lianjia/xiaoqu/pg{pg
三、举个栗⼦。
拥有了以上的三个def就可以完成数据的爬取和打印⼯作了。下⾯举个简单的栗⼦谈谈如何串联三个def。
只需要三⾏(如果⼤家需要⾃⼰该代码写⼊excel之类的话,可以直接放弃第⼆⾏第三⾏):
第⼀⾏:获取3-5页⾥的房价数据并且整合为⼀个字典。
第⼆⾏:美化⼀下第⼀⾏的字典(主要为了打印出来⽐较好看)。
第三⾏:打印。
price_dict = merge_price_dict(3, 5)formation_dict = json.dumps(price_dict, indent=4, ensure_ascii=False) # 输出美化print(formation_dict)
打印出来结果长这样。
完整代码
import requestsimport reimport timeimport json# 爬取房价并且返回⼀个页⾯的字典def get_housing_price(url):    url = str(url)    html = (url).text # 获
(.*?)' price = re.findall(price_rule, html) # ⼩区所在区域 district_rule = r'class="district" >(.*?)' district = re.findall(district_rule, html) # ⼩区所在
商圈 bizcircle_rule = r'class="bizcircle" >(.*?) ' bizcircle = re.findall(bizcircle_rule, html) # 建⽴⼩区名和房价对应的字典 housing_price_dict
= {} if len(name) == len(price) == len(district) == len(bizcircle): for i in range(len(name)): infor = [] # 存放信息的列表 if price[i] != '暂⽆': #因为
存在暂⽆,把除了暂⽆房价数据以外的房价变成浮点型 floated = float(price[i]) else: floated = '暂⽆' infor.append(district[i])
infor.append(bizcircle[i]) infor.append(floated) housing_price_dict[name[i]] = infor # 遍历⽣成键值 else: print('参数匹配失败') return
stackoverflow被墙
housing_price_dict# 合并字典def merge_dict(dict1, dict2): merged = {**dict1, **dict2} return merged# 整合房价字典def
merge_price_dict(start, end): initial = {} for pg in range(start, end+1): # 设置起始和中⽌界⾯ url = f'bj.lianjia/xiaoqu/pg{pg}/' prices
= get_housing_price(url) time.sleep(1) initial = merge_dict(initial, prices) return initialprice_dict = merge_price_dict(3, 5)formation_dict =
json.dumps(price_dict, indent=4, ensure_ascii=False) # 输出美化print(formation_dict)
html个人网页完整代码怎么看看明⽩了吗有不懂的随时评论,有时间会⼀⼀回复的!源码获取后台私信源码

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。