通过<span>中的文本选择div文本

时间:2019-01-27 11:04:12

标签: python beautifulsoup

我想通过特殊的跨度文本在页面上选择div文本。例如,我有:

<div>
  <span> Org name: </span>
   "corp. org name"
 </div>

因此,我想通过按span标签中的文本搜索所有查找内容来选择corp. org nameOrg name:

1 个答案:

答案 0 :(得分:0)

首先,我不会说俄语。因此,我无法验证这是否是您想要的。

我已经做出了我想您想要的内容,该内容将搜索org name:返回Corp. org name:。下面的函数正是这样做的,它返回org name作为键和corp org name作为值的字典。在这里:

def scrape(url):
    page = requests.get(url, verify=False)
    soup = BeautifulSoup(page.content, 'lxml')

    #find all divs on the right side
    lst = soup.find_all('div', {"style": "margin-bottom: 16px;"})
    #the output dictioary
    corpNames = {}
    for idx, link in enumerate(lst):
        #get the text inside <span> which is the key
        key = link.find('span').get_text()
        if key:
            value = link.get_text()
            value = re.sub(key, "", value)
            value = re.sub(r"\s+", " ", value) #reduce white spaces
            corpNames[key] = value.strip()
    return corpNames

这是使用方法:

>>> import re
>>> import requests
>>> from bs4 import BeautifulSoup
>>>
>>> url = "https://reestr.minsvyaz.ru/reestr/61245/"
>>> d = scrape(url)
>>> print(d)
{'Альтернативные наименования:': 'ЭПС "Система ГАРАНТ"', 'Класс ПО:': 'Информационные системы для решения специфических отраслевых задач, Поисковые системы, Прикладное программное обеспечение общего назначения, Офисные приложения, Лингвистическое программное обеспечение', 'Сайт производителя:': 'http://www.aero.garant.ru', 'Дата регистрации:': '20 Февраля 2016', 'Рег. номер ПО:': '6', 'Дата решения уполномоченного органа:': '20 Февраля 2016', 'Решение уполномоченного органа:': 'Приказ Минкомсвязи России от 20.02.2016 №63', 'Ссылка на приказ Минкомсвязи:': 'Приказ'}