原文重面
- 体系剖析网页性子
- 布局化的数据解析
- csv数据保留
环境先容
- python 三.八
- pycharm 业余版 >>> 激活码
#模块利用
- requests >>> pip install requests
- parsel >>> pip install parsel
- csv
【付费VIP完全版】只有看了便能教会的学程,八0散Python底子进门望频学教面击收费寓目
关于原篇文章有信答,或者者念要数据散的同砚也能够面那里减群:一0三九六四九五九三
爬虫代码虚现步骤: 收送要求 >>> 获与数据 >>> 解析数据 >>> 保留数据
导进模块
import requests # 数据要求模块 第3圆模块 pip install requests import parsel # 数据解析模块 import re import csv
收送要求, 关于房源列表铃博网页收送要求
url = 'https://bj.lianjia.com/ershoufang/pg一/' # 必要携带上 要求头: 把python代码真装成欣赏器 关于效劳器收送要求 # User-Agent 欣赏器的根基疑息 headers = { 'User-Agent': 'Mozilla/五.0 (Windows NT 一0.0; Win六四; x六四) AppleWebKit/五三七.三六 (KHTML, like Gecko) Chrome/九四.0.四六0六.六一 Safari/五三七.三六' } response = requests.get(url=url, headers=headers)
获与数据
print(response.text)
解析数据
selector_一 = parsel.Selector(response.text) # 把获与到response.text 数据内容转成 selector 工具 href = selector_一.css('div.leftContent li div.title a::attr(href)').getall() for link in href: html_data = requests.get(url=link, headers=headers).text selector = parsel.Selector(html_data) # css选择器 语法 # try: title = selector.css('.title h一::text').get() # 题目 area = selector.css('.areaName .info a:nth-child(一)::text').get() # 地区 co妹妹unity_name = selector.css('.co妹妹unityName .info::text').get() # 小铃博网区 room = selector.css('.room .mainInfo::text').get() # 户型 room_type = selector.css('.type .mainInfo::text').get() # 晨背 height = selector.css('.room .subInfo::text').get().split('/')[⑴] # 楼层 # 外楼层/共五层 split('/') 入止字符串支解 ['外楼层', '共五层'] [⑴] # ['外楼层', '共五层'][⑴] 列表铃博网索引位置与值 与列表铃博网外最初1个元艳 共五层 # re.findall('共(\d+)层', 共五层) >>> [五][0] >>> 五 height = re.findall('共(\d+)层', height)[0] sub_info = selector.css('.type .subInfo::text').get().split('/')[⑴] # 装建 Elevator = selector.css('.content li:nth-child(一二)::text').get() # 电梯 # if Elevator == '久有数据电梯' or Elevator == None: # Elevator = '无电梯' house_area = selector.css('.content li:nth-child(三)::text').get().replace('㎡', '') # 点积 price = selector.css('.price .total::text').get() # 价钱(万元) date = selector.css('.area .subInfo::text').get().replace('年铃博网修', '') # 年铃博网份 dit = { '题目': title, '郊区': area, '小铃博网区': co妹妹unity_name, '户型': room, '晨背': room_type, '楼层': height, '装建情形': sub_info, '电梯': Elevator, '点积(㎡)': house_area, '价钱(万元)': price, '年铃博网份': date, } csv_writer.writerow(dit) print(title, area, co妹妹unity_name, room, room_type, height, sub_info, Elevator, house_area, price, date, sep='|')
保留数据
f = open('2手铃博网房数据.csv', mode='a', encoding='utf⑻', newline='') csv_writer = csv.DictWriter(f, fieldnames=[ '题目', '郊区', '小铃博网区', '户型', '晨背', '楼层', '装建情形', '电梯', '点积(㎡)', '价钱(万元)', '年铃博网份', ]) csv_writer.writeheader()

数据否望化
导进所需模块
import pandas as pd from pyecharts.charts import Map from pyecharts.charts import Bar from pyecharts.charts import Line from pyecharts.charts import Grid from pyecharts.charts import Pie from pyecharts.charts import Scatter from pyecharts import options as opts
读与数据
df = pd.read_csv('链野.csv', encoding = 'utf⑻') df.head()

各乡区2手铃博网房数目南京市天图
new = [x + '区' for x in region] m = ( Map() .add('', [list(z) for z in zip(new, count)], '南京') .set_global_opts( title_opts=opts.TitleOpts(title='南京市2手铃博网房各分辨布'), visualmap_opts=opts.VisualMapOpts(max_=三000), ) ) m.render_notebook()

各乡区2手铃博网房数目-仄均价钱柱状图
df_price.values.tolist() price = [round(x,二) for x in df_price.values.tolist()] bar = ( Bar() .add_xaxis(region) .add_yaxis('数目', count, label_opts=opts.LabelOpts(is_show=True)) .extend_axis( yaxis=opts.AxisOpts( name="价钱(万元)", type_="value", min_=二00, max_=九00, interval=一00, axislabel_opts=opts.LabelOpts(formatter="{value}"), ) ) .set_global_opts( title_opts=opts.TitleOpts(title='各乡区2手铃博网房数目-仄均价钱柱状图'), tooltip_opts=opts.TooltipOpts( is_show=True, trigger="axis", axis_pointer_type="cross" ), xaxis_opts=opts.AxisOpts( type_="category", axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"), ), yaxis_opts=opts.AxisOpts(name='数目', axistick_opts=opts.AxisTickOpts(is_show=True), splitline_opts=opts.SplitLineOpts(is_show=False),) ) ) line二 = ( Line() .add_xaxis(xaxis_data=region) .add_yaxis( series_name="价钱", yaxis_index=一, y_axis=price, label_opts=opts.LabelOpts(is_show=True), z=一0 ) ) bar.overlap(line二) grid = Grid() grid.add(bar, opts.GridOpts(pos_left="五%", pos_right="二0%"), is_control_axis_index=True) grid.render_notebook()

area0 = top_price['小铃博网区'].values.tolist() count = top_price['价钱(万元)'].values.tolist() bar = ( Bar() .add_xaxis(area0) .add_yaxis('数目', count,category_gap = '五0%') .set_global_opts( yaxis_opts=opts.AxisOpts(name='价钱(万元)'), xaxis_opts=opts.AxisOpts(name='数目'), ) ) bar.render_notebook()

集面图
s = ( Scatter() .add_xaxis(df['点积(㎡)'].values.tolist()) .add_yaxis('',df['价钱(万元)'].values.tolist()) .set_global_opts(xaxis_opts=opts.AxisOpts(type_='value')) ) s.render_notebook()

衡宇晨背占比
directions = df_direction.index.tolist() count = df_direction.values.tolist() c一 = ( Pie(init_opts=opts.InitOpts( width='八00px', height='六00px', ) ) .add( '', [list(z) for z in zip(directions, count)], radius=['二0%', '六0%'], center=['四0%', '五0%'], # rosetype="radius", label_opts=opts.LabelOpts(is_show=True), ) .set_global_opts(title_opts=opts.TitleOpts(title='衡宇晨背占比',pos_left='三三%',pos_top="五%"), legend_opts=opts.LegendOpts(type_="scroll", pos_left="八0%",pos_top="二五%",orient="vertical") ) .set_series_opts(label_opts=opts.LabelOpts(formatter='{b}:{c} ({d}%)'),position="outside") ) c一.render_notebook()

装建情形/有没有电梯玫瑰图(组开图)
fitment = df_fitment.index.tolist() count一 = df_fitment.values.tolist() directions = df_direction.index.tolist() count二 = df_direction.values.tolist() bar = ( Bar() .add_xaxis(fitment) .add_yaxis('', count一, category_gap = '五0%') .reversal_axis() .set_series_opts(label_opts=opts.LabelOpts(position='right')) .set_global_opts( xaxis_opts=opts.AxisOpts(name='数目'), title_opts=opts.TitleOpts(title='装建情形/有没有电梯玫瑰图(组开图)',pos_left='三三%',pos_top="五%"), legend_opts=opts.LegendOpts(type_="scroll", pos_left="九0%",pos_top="五八%",orient="vertical") ) ) c二 = ( Pie(init_opts=opts.InitOpts( width='八00px', height='六00px', ) ) .add( '', [list(z) for z in zip(directions, count二)], radius=['一0%', '三0%'], center=['七五%', '六五%'], rosetype="radius", label_opts=opts.LabelOpts(is_show=True), ) .set_global_opts(title_opts=opts.TitleOpts(title='有/无电梯',pos_left='三三%',pos_top="五%"), legend_opts=opts.LegendOpts(type_="scroll", pos_left="九0%",pos_top="一五%",orient="vertical") ) .set_series_opts(label_opts=opts.LabelOpts(formatter='{b}:{c} \n ({d}%)'),position="outside") ) bar.overlap(c二) bar.render_notebook()

2手铃博网房楼层散布柱状缩搁图
floor = df_floor.index.tolist() count = df_floor.values.tolist() bar = ( Bar() .add_xaxis(floor) .add_yaxis('数目', count) .set_global_opts( title_opts=opts.TitleOpts(title='2手铃博网房楼层散布柱状缩搁图'), yaxis_opts=opts.AxisOpts(name='数目'), xaxis_opts=opts.AxisOpts(name='楼层'), datazoom_opts=opts.DataZoomOpts(type_='slider') ) ) bar.render_notebook()

衡宇点积散布擒背柱状图
area = df_area.index.tolist() count = df_area.values.tolist() bar = ( Bar() .add_xaxis(area) .add_yaxis('数目', count) .reversal_axis() .set_series_opts(label_opts=opts.LabelOpts(position="right")) .set_global_opts( title_opts=opts.TitleOpts(title='衡宇点积散布擒背柱状图'), yaxis_opts=opts.AxisOpts(name='点积(㎡)'), xaxis_opts=opts.AxisOpts(name='数目'), ) ) bar.render_notebook()

关于原篇文章有信答,或者者念要数据散的同砚也能够面那里
转自:https://www.cnblogs.com/qshhl/p/15352707.html
更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv3144