我用beauthulsoup编写了一个脚本,从web中提取某些信息。唯一的问题是,我不知道如何将结果转换成字典,如果我这样做,代码将像意大利面条一样。我不确定我写的这段代码是否可以接受为python代码。最后一项Species
应该是像“Lycaon pictus”这样的二项式命名法,而“pictus”之后的字符串应该被忽略。需要一些帮助。在
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
import re
url = "https://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=183833#null"
page = urlopen(Request(url, headers={'User-Agent': 'Mozilla/5.0'}))
soup = BeautifulSoup(page, 'html.parser')
results = soup.findAll('tr')
for result in results:
text = result.get_text().strip()
pattern = r"^(Kingdom|Phylum|Division|Class|Order|Family|Genus|Species)[\w]+"
if re.match(pattern, text):
res = text.split('\n', 1)[0].strip()
print(res)
{
'Kingdom': 'Animalia',
'Phylum': 'Chordata',
'Class': 'Mammalia',
'Order': 'Carnivora',
'Family': 'Canidae',
'Genus': 'Lycaon',
'Species': 'Lycaon pictus'
}
对于给定的具体示例,该方法有效:
输出:
^{pr2}$这在很大程度上依赖于上面例子中给出的确切格式。例如,如果网站的}。在
'Lycaon Pictus'
带有'P'
作为'Species'
的大写字母,那么字典中相应的条目将只是'Lycaon'
,而不是{“结果”是这样的
在它上使用.get_text()时,它会变成
^{pr2}$所以在匹配时,应该使用旧的“result”并将列拆分。例如:
然后用这些片段来找到你的信息,例如
当然,当您处理字符串时,不能期望它返回dictionary。因此,您应该在开始for循环之前创建一个,我们将其称为
dictionary
这样你就能得到你要找的词典了
相关问题 更多 >
编程相关推荐