BS4 для поиска встроенного идентификационного номера - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь использовать BS4, чтобы найти идентификационные номера, встроенные в html. Однако на самом деле они не привязаны к чему-либо, с чем я привык работать, например, к тегам и т.п. Я посмотрел, как извлечь что-то из класса div, но и с этим не добился успеха. Ниже показано, как выглядит суп после того, как я соберу html:

<div class="result-bio">
<div class="profile-image">
<img class="search-image load-member-profile" ng-click="results.loadProfile(result.UGuid)"
 ng-src="http://file.asdf.org/profile/picture.ashx?id=9091a557-fd44-44be-9468-9386d90a39b8" 
 src="http://file.asdf.org/profile/picture.ashx?id=9091a557-fd44-44be-9468-9386d90a39b8"/>
</div>

Код, который я пытался использовать:

soup = BeautifulSoup(browser.page_source, 'html.parser')
print(soup)
ID_Numbers = []
for IDs in soup.find_all('div', string='http'):
    ID_Numbers.append(IDs.text)

Есть ли у кого-нибудь предложения, как решить эту проблему? ? Я полагаю, что мне придется разделаться позже, но на самом деле все, что мне нужно, это встроенное в него значение id = xxxx. Я безуспешно пробовал большинство решений, которые видел в стеке. Спасибо!

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Вам нужно найти все элементы изображения, затем l oop поверх этих элементов, чтобы получить источник для каждого изображения. Затем просто разбейте sr c, чтобы получить идентификатор.

soup = bs4.BeautifulSoup(page_source, features='html.parser')
for i in soup.find_all('img'):
    src = i['src']
    try:
        id = src.split('?id=')[1]
        print(id)
    except(IndexError):
        continue

Здесь я разделил sr c, чтобы получить идентификатор, но в более сложных случаях вам может потребоваться использовать регулярное выражение .

0 голосов
/ 08 мая 2020

Вы можете использовать встроенную [urlparse][1] библиотеку, как показано ниже:

from bs4 import BeautifulSoup
from urllib.parse import urlsplit 

html_doc = """
<div class="result-bio">
<div class="profile-image">
<img class="search-image load-member-profile" ng-click="results.loadProfile(result.UGuid)"
 ng-src="http://file.asdf.org/profile/picture.ashx?id=9091a557-fd44-44be-9468-9386d90a39b8" 
 src="http://file.asdf.org/profile/picture.ashx?id=9091a557-fd44-44be-9468-9386d90a39b8"/>
</div>
"""

soup = BeautifulSoup(html_doc, 'html.parser')
images = soup.findAll('img')
ids = []
for i in images:
    parsed = urlsplit(i['src'])
    id = parsed.query.replace("id=", "")
    ids.append(id)
print(ids)

Это дало мне результат: -

['9091a557-fd44-44be-9468-9386d90a39b8']
...