用python获取一个网页里面表格的数据

该文展示了如何利用Python的requests和BeautifulSoup库从维基百科抓取ISO3166-1国家代码和国际电话区号列表,通过解析HTML表格和列表结构,将数据存储为结构化的字典列表。
摘要由CSDN通过智能技术生成

demo1

比如我想要这个网址  https://zh.wikipedia.org/zh-cn/ISO_3166-1 下的国际地区代码列表

 第一步F12查看这个部分的结构。结构如下 是一个table>tr>td

py代码如下

import requests
from bs4 import BeautifulSoup

url = "https://zh.wikipedia.org/zh-cn/ISO_3166-1"


# 发送请求并获取响应内容
response = requests.get(url)
html_content = response.text

# 使用BeautifulSoup库解析HTML内容
soup = BeautifulSoup(html_content, 'html.parser')

# 查找表格元素
table = soup.find('table')

# 获取所有行
rows = table.find_all('tr')

# 创建空列表来存储数据
data = []

# 遍历所有行,并将每行的所有单元格的文本添加到列表中
for row in rows:
    cells = row.find_all('td')
    if len(cells) > 1:
        row_data = [cell.text.strip() for cell in cells]
        # data.append(row_data)
        data.append({
            "en": row_data[0], 
            "short": row_data[1],  
            "shortLen3": row_data[2],  
            "numberCode": row_data[3],  
            "iso": row_data[4],  
            "name": row_data[5],  
            "isTndependent": row_data[6],  
        })


# 输出列表
print(data)

返回的结构是这样的

[
    {
        "en": "Afghanistan",
        "short": "AF",
        "shortLen3": "AFG",
        "numberCode": "004",
        "iso": "ISO 3166-2:AF",
        "name": "阿富汗",
        "isTndependent": "是"
    },
    {
        "en": "Åland Islands",
        "short": "AX",
        "shortLen3": "ALA",
        "numberCode": "248",
        "iso": "ISO 3166-2:AX",
        "name": "奥兰",
        "isTndependent": "否"
    },
    ....省略其他
]

demo2

下面网址是国际电话区号列表

https://zh.wikivoyage.org/zh-cn/%E5%9B%BD%E9%99%85%E7%94%B5%E8%AF%9D%E5%8C%BA%E5%8F%B7%E5%88%97%E8%A1%A8

 同样的方法查看结构

py代码如下

import requests
from bs4 import BeautifulSoup

url = "https://zh.wikivoyage.org/zh-cn/%E5%9B%BD%E9%99%85%E7%94%B5%E8%AF%9D%E5%8C%BA%E5%8F%B7%E5%88%97%E8%A1%A8"

# 发送请求并获取响应内容
response = requests.get(url)
html_content = response.text

# 使用BeautifulSoup库解析HTML内容
soup = BeautifulSoup(html_content, 'html.parser')

# 查找表格元素
table = soup.find('table')

# 获取所有ul
rows = table.find_all('ul')

# 获取所有li
lis=table.find_all('li')

# 创建空列表来存储数据
data = []

# 遍历所有li,并将每行的所有单元格的文本添加到列表中
# for li in lis:
#     if len(li) > 1:
#          data.append(li.text.strip())

# 简写方法
data = [li.text.strip() for li in lis]

# 输出列表
print(data)

返回的结果是这样的

['也门 967', '赞比亚 260', '津巴布韦 263',.....省略]

具体应用根据自己想要的数据格式获取就行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值