Python爬取html表格数据

Pathon爬取网页中的表格数据

导入库

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd

构造参数信息

  1. 构造url
  2. 设置headers信息(非必要)
  3. 如果爬取的页面有很多,可考虑将要爬取的url地址构造成一个列表,然后在后面的爬取程序中进行循环
url = "https://*****2345.com/Pc/GetHistory?areaInfo[areaId]=71731&areaInfo[areaType]=2&date[year]=2022&date[month]=3"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.63',
        'Host':'lishi.tianqi.com',
        'Accept-Encoding': "gzip, deflate",
        'Connection': "keep-alive",
        'cache-control': "no-cache"} 

爬取网页

  • 分析页面内容
  • 爬取页面内容
  • 解析爬取结果
  • 处理爬取结果

可考虑将爬取的多个页面的数据存放在一个列表中,然后再进行遍历

r = requests.request('GET',url)
print(r.encoding)  
print(r.apparent_encoding)  
# r.encoding是根据http header推测出的编码方式,如果没有header,默认为ISO-8859-1。
# r.apparent_encoding是根据内容分析出来的编码方式,用这个代替r.encoding可以解析出中文。
# 可以在发送request请求前,先设置响应的编码方式。
# 如:r.encoding = "utf-8" 或"iso-8859-1"或"ascii"或"unicode-escape"

处理爬取内容

#encode()方法是字符串类型数据编码为字节型数据
#decode()方法是将字节型数据解码为字符型数据。
print(type(r.text))
print(type(r.content))
html_text = r.content.decode('unicode-escape')
html_text=html_text.replace("\/","/")
print(html_text)

解析爬取内容

soup = bs(html_text,'html.parser')
print(soup.prettify())
history_table=soup.find("table",{"class":"history-table"})
history_table
tr_all = history_table.find_all("tr")
print(tr_all[1])
<tr>
<td>2022-03-01 周二</td>
<td style="color:#ff5040;">7°</td>
<td style="color:#3097fd;">-2°</td>
<td>多云~晴</td>
<td>东北风1级</td>
<td><span class="history-aqi wea-aqi-3">107 轻度</span></td> </tr>
th_all=tr_all[0].find_all("th")
columns_name=list(thx.string for thx in th_all)
print(columns_name)
['日期', '最高温', '最低温', '天气', '风力风向', '空气质量指数']
td_all=tr_all[1].find_all('td')
td_all[5].text
'107 轻度'
data=[]
for trx in tr_all:
    temp=[]
    td_all=trx.find_all("td")
    for tdx in td_all:
        temp.append(tdx.text)
    data.append(temp) if len(temp)>0 else 0        
data[0:5]
[['2022-03-01 周二', '7°', '-2°', '多云~晴', '东北风1级', '107 轻度'],
 ['2022-03-02 周三', '9°', '0°', '多云', '东北风1级', '86 良'],
 ['2022-03-03 周四', '8°', '0°', '阴~多云', '东北风1级', '74 良'],
 ['2022-03-04 周五', '11°', '1°', '多云', '东北风1级', '69 良'],
 ['2022-03-05 周六', '10°', '1°', '阴~多云', '北风1级', '80 良']]

pandas处理数据

df=pd.DataFrame(data,columns=columns_name)
df.head()
日期最高温最低温天气风力风向空气质量指数
02022-03-01 周二-2°多云~晴东北风1级107 轻度
12022-03-02 周三多云东北风1级86 良
22022-03-03 周四阴~多云东北风1级74 良
32022-03-04 周五11°多云东北风1级69 良
42022-03-05 周六10°阴~多云北风1级80 良

保存结果

df.to_excel("./data/qianqi202203.xlsx",encoding='utf_8')

  • 6
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 安居客出租房(武汉为例)爬虫+数据分析+可视化 这个爬虫是我前段时间在淘宝上做单子的时候遇见的一个客户需求。本来以为就是一个简单的爬虫项目。但后面客户加了数据清洗和数据分析的要求。而后又加了要详细代码解释的需求等等。直到最后客户坦白说这是他们大专的毕设.......但是这个单子坐下来只有200左右,我想了一下,感觉好亏啊。在淘宝上随便找一个做毕设的都要好多钱的,而且客户本身的代码能力、数学、逻辑能力都很差,导致我每行都给注释以及看不懂,在我交付代码后又纠缠了我一个多礼拜。反正总体做下来的感觉就是烦躁。头一次感觉到了客户需求变更带来的巨大麻烦。 总之这是一次不是很愉快的爬虫经历。但是作为我写爬虫以来注释最详细的一次,以及第一次真正使用像matplotlib这种数据分析库的代码,我认为还是有必要分享出来给大家当个参考的(PS:大佬轻拍~)。爬虫本身几乎没有什么难度,写的也比较乱,敬请见谅。 **功能** 爬取安居客上的出租房信息(武汉地区的),并通过爬取数据进行数据清洗以及数据分析。给出四个不同层面的可视化图。最终结果如下图所示: ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/1.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/2.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/3.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/4.png) **环境** 1. Windows 10 2. python3.7 **使用方法** 首先声明该爬虫由于是特定情况下写的,所以本身的通用性特别差,仅可以对安居客网站上的武汉的出租房信息进行爬取,且需要自己手动更新cookie。同时在对数据进行分析及可视化的时候由于也是特别针对武汉出租房的进行的,所以针对性也比较强。如果别的需求需要自己进行更改。 1. 访问[安居客网址](https://wuhan.anjuke.com/),获取cookie。 > tip:获取cookie的方法可根据[此链接](https://jingyan.baidu.com/article/5d368d1ea6c6e33f60c057ef.html) 2. 在项目找到`spider.py`的文件,将第12行的cookie换成你自己的cookie。 3. 运行`spider.py`,获取房源信息。运行后应会产生一个`武汉出租房源情况.csv`的文件。此文件为我们从安居客上爬取的房源信息,其包含`房屋租住链接、房屋描述、房屋地址、房屋详情(户型)以及经纪人、房屋价格`五个属性。 4. 在获取了数据之后我们运行`matplotlib.py`文件。进行数据清洗,分析,可视化。运行后即可获得**功能**展示四个图片。 **技术栈** 1. request 2. parsel 3. pandas 4. matplotlib **进步(相比之前)** 此次爬虫相比之前的技术上可以说有减无增。但其注释相当详细,可谓是每行代码都有注释。所以对于初学者应该有一些用处。同时使用matplotlib进行了数据分析可视化等。对于数据处理的代码的注释也是几乎每行都有注释的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值