Получить Href по тексту, используя Beautifulsoup - PullRequest
0 голосов
/ 10 апреля 2019

Я использую «запросы» и «Beautifulsoup» для поиска всех ссылок HREF с веб-страницы с конкретным текстом. Я уже сделал это, но если текст появляется в новой строке, Beautifulsoup не «видит» его и не возвращает эту ссылку.

soup = BeautifulSoup(webpageAdress, "lxml")

path = soup.findAll('a', href=True, text="Something3")
print(path)

Пример:

Таким образом, он возвращает текст Href of Something3:

...
<a href="page1/somethingC.aspx">Something3</a>
...

Таким образом, он не возвращает текст Href of Something3:

...
<a href="page1/somethingC.aspx">
Something3</a>
...

Разница в том, что текст Href (Something3) находится в новой строке. И я не могу изменить HTML-код, потому что я не веб-мастер этой веб-страницы.

Есть идеи, как мне это решить?

Примечание: я уже пытался использовать soup.replace ('\ n', '') .replace ('\ r', ''), но я получаю сообщение об ошибке. Объект NoneType не вызывается.

Ответы [ 3 ]

1 голос
/ 10 апреля 2019

Вы можете использовать :contains псевдокласс с bs4 4.7.1

from bs4 import BeautifulSoup as bs

html = '<a href="page1/somethingC.aspx">Something3</a>'
soup = bs(html, 'lxml')
links = [link.text for link in soup.select('a:contains(Something3)')]
print(links)
1 голос
/ 10 апреля 2019

Вы можете использовать регулярные выражения, чтобы найти любой текст, содержащий `" Something3 ":

html = '''<a href="page1/somethingC.aspx">Something3</a>

<a href="page1/somethingC.aspx">
Something3</a>'''


from bs4 import BeautifulSoup
import re

soup = BeautifulSoup(html, "lxml")

path = soup.findAll('a', href=True, text=re.compile("Something3"))

for link in path:
    print (link['href'])
0 голосов
/ 10 апреля 2019

И решение без регулярных выражений:

path = soup.select('a')
if path[0].getText().strip() == 'Something3':
print(path)

Вывод:

[<a href="page1/somethingC.aspx">
Something3</a>]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...