Python,BeautifulSoup,重新: How to convert extracted texts to dictionary from web?

标签 python regex dictionary beautifulsoup urllib

我使用 BeautifulSoup 制作了一个脚本来从网络中提取某些信息。唯一的问题是我不知道如何将结果转换为字典,如果我这样做,代码就会像意大利面条一样。我不确定我写的这段代码是否可以被接受为Pythonic。最后一项 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)
<小时/>

脚本的输出

KingdomAnimalia
PhylumChordata
ClassMammalia Linnaeus, 1758
OrderCarnivora Bowdich, 1821
FamilyCanidae Fischer, 1817
GenusLycaon Brookes, 1827
SpeciesLycaon pictus (Temminck, 1820) – African hunting dog, African Wild Dog, Painted Hunting Dog
<小时/>

预期结果

{
    'Kingdom': 'Animalia',
    'Phylum': 'Chordata',
    'Class': 'Mammalia',
    'Order': 'Carnivora',
    'Family': 'Canidae',
    'Genus': 'Lycaon',
    'Species': 'Lycaon pictus'
}

最佳答案

对于给出的具体示例,这有效:

...
results = soup.findAll('tr')
my_dict = {}
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()
        pieces = re.findall(r'[A-Z][ a-z]*', res)
        my_dict[pieces[0]] = pieces[1]
print(my_dict)

输出:

{'Kingdom': 'Animalia', 'Phylum': 'Chordata', 'Class': 'Mammalia',
 'Order': 'Carnivora', 'Family': 'Canidae', 'Genus': 'Lycaon',
 'Species': 'Lycaon pictus'}

这在很大程度上依赖于上例中给出的确切格式。例如,如果网站有 'Lycaon Pictus''Species' 的大写字母为 'P',则 'Species' 中的相应条目字典将只是 'Lycaon' 而不是 'Lycaon Pictus'

关于Python,BeautifulSoup,重新: How to convert extracted texts to dictionary from web?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50621172/

相关文章:

javascript - jQuery 正则表达式替换返回替换单词

自动格式化 Pattern 的 JavaScript RegExp

c++ - 绑定(bind)到类型的引用会丢弃限定符

Javascript 将 2 个数组映射到 1 个对象

python - Selenium Webdriver with Python - 获取 html 标签之间的字符串或内容

Python 不会使用 for 循环从字典中正确提取值

regex - 用反斜杠替换路径中的所有正斜杠(因此,不是所有正斜杠)

C++,对指向的 map 容器使用迭代器时出错。映射/设置迭代器不可递增

python - 基于 Web2Py 的 routes.py 中的函数定义子域

python - Django 的嵌套 Meta 类是如何工作的?