我正在尝试使用python从网站设置自动Web抓取来存储html数据并制作使用特定格式的JSON文件。我已经有了JSON文件模板,并且已经能够使用BeautifulSoup获得HTML数据作为.text文件。但是,我不知道如何在不直接更改代码的情况下选择数据的特定部分。有什么是我可以做的,还是有必要自己插入所有的数据?谢谢,下面是我正在使用的代码。
import requests
from bs4 import BeautifulSoup
# need to automate page swaping but for now test
# need to inciment over tr class-2 ->class 895 page = requests.get('https://www.finalfantasyd20.com/bestiary)
page = requests.get('https://www.finalfantasyd20.com/bestiary/undead/abadon/')
soup = BeautifulSoup(page.content, "html.parser")
results = soup.find(id= 'main')
Name = soup.find(id='abadon')
# print(Name.text)
# Type = soup.find() not gonna work with how this is caus no header
Stats = results.find_all('p')
for stat in Stats:
print(stat.text)
Str = stat.find(string='Str')
print(Str)
我已经尝试了很多次,试图将特定的值分离出来,而不把它放在我自己身上,但都失败了。
当我尝试时,print(Str)没有输出任何内容。也许你需要这个:
str_list =[]
for stat in Stats:
print(stat.text)
Str = stat.find(string='Str')
str_list.append(stat.text)
#print(Str)
据我所知,您想在STATISTICS头(h5)下面删除统计数据。如您所见,在STATISTICS下面有一个段落
及其子段落是您的目标:
<p><strong>Str</strong> 26, <strong>Dex</strong> 18......</p>
我们可以把它看作一个树,其中p是父节点,
<strong>Str</strong>
' 26, '
<strong>Dex</strong>
' 18, '
.
.
.
是子节点
一个解决方案是:
1/查找具有强标签和'stat'字符串的儿童,其中stat可以是Str或DEX…[在你的例子中,stat.find("strong",string='Str')]
2/导航到它的下一个兄弟,提取相应的值[Str.next_sibling]
查看beautifulsoup官方文档获取更多信息https://beautiful-soup-4.readthedocs.io/en/latest/index.html?highlight=next_sibling#next-sibling-and-previous-sibling
这是你的代码的补丁版本
import requests
from bs4 import BeautifulSoup
import re
# need to automate page swaping but for now test
# need to inciment over tr class-2 ->class 895 page = requests.get('https://www.finalfantasyd20.com/bestiary)
page = requests.get('https://www.finalfantasyd20.com/bestiary/undead/abadon/')
soup = BeautifulSoup(page.content, "html.parser")
results = soup.find(id= 'main')
Name = soup.find(id='abadon')
# print(Name.text)
# Type = soup.find() not gonna work with how this is caus no header
stats = results.find_all('p')
for stat in stats:
# print(stat.text)
# print(stat)
Str = stat.find("strong",string='Str')
if Str is not None:
Str_text = Str.text
# here is the value of Str
value = Str.next_sibling
print(value)
您可以对其他统计数据执行相同的操作。