一、场景分析
假设有如下 html 文档:
写一段 python 脚本,解析出里面的数据,包括经度维度。
<div class='storelist'>
<ul>
<li lng="100.111111" lat="10.111111">
<h4>联盟店1</h4>
<p>
<br />X市Y区Z街道 1000 号
</p>
</li>
<li lng="101.111111" lat="11.111111">
<h4>联盟店2</h4>
<p>
<br />X市Y区Z街道 1001 号
</p>
</li>
<li lng="102.111111" lat="12.111111">
<h4>联盟店3</h4>
<p>
<br />X市Y区Z街道 1002 号
</p>
</li>
</ul>
</div>
二、步骤
1、安装 BeautifulSoup4 库
pip install bs4
或者
pip install beautifulsoup4
2、脚本内容
store.py 脚本内容如下:
from bs4 import BeautifulSoup
# 官方文档:https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/#id14
# 输入文档
input_path = r"C:\Users\Administrator\Desktop\py\html\store.html"
# 输出文档
output_path = r"C:\Users\Administrator\Desktop\py\html\data.txt"
# 以 append 追加方式打开输出文档
output_file = open(output_path, 'a', encoding='utf-8')
# 打开 html 输入文档,并使用 Python 标准库 html.parser 解析成 BeautifulSoup 对象
soup = BeautifulSoup(open(input_path, 'r', encoding='utf-8'), 'html.parser')
# 搜索文档树,获取到所有 li TAG 组成的数组
li_array = soup.find_all('li')
# 遍历这个数组,并往输出文档输出信息
for i, li in enumerate(li_array):
# print(li.contents)
output_file.write('\n'+str(i+1)+'、'+li.contents[1].text)
output_file.write('\n 经度:'+li['lng'])
output_file.write('\n 维度:'+li['lat'])
output_file.write('\n 名称:'+li.contents[1].text)
output_file.write('\n 地址:'+li.contents[3].text.strip())
output_file.close()
其中,contents 属性可以将 tag 的子节点以列表的方式输出:
print(li.contents)
我们可以用列表索引来获取它的某一个元素
li.contents[1] 表示 <h4>联盟店X</h4> 获取标签里面的内容,就是 li.contents[1].text
li.contents[3] 表示 <p></p> 因为 p 后面有换行,所以用 strip() 函数去掉换行符
不然输出结果就会变成
3、运行
py store.py
4、输出结果
1、联盟店1
经度:100.111111
维度:10.111111
名称:联盟店1
地址:X市Y区Z街道 1000 号
2、联盟店2
经度:101.111111
维度:11.111111
名称:联盟店2
地址:X市Y区Z街道 1001 号
3、联盟店3
经度:102.111111
维度:12.111111
名称:联盟店3
地址:X市Y区Z街道 1002 号