Beautiful Soup найти ссылку на основе гиперссылки Текст - PullRequest
0 голосов
/ 15 мая 2018

У меня проблема с попыткой получить красивый суп, найти href с определенным названием и извлечь только href.

У меня есть код ниже, но, кажется, не могу заставить его получить только href(независимо от того, что находится между открытием и закрытием) на основе текста гиперссылки, найденного в этом разделе.

res = requests.get(website_url)
soup = bs4.BeautifulSoup(res.text, 'html.parser')
temp_tag_href = soup.select_one("a[href*=some text]")
sometexthrefonly = temp_tag_href.attrs['href']

По сути, я хотел бы, чтобы он прошел через весь html, проанализированный в супе, и возвратил только то, что находится между href open "и close", потому что текст этой гиперссылки - это "некоторый текст".

так что шаги будут:

1: parse html, 
2: look at all the a hrefs tags, 
3: find the href that has the hyperlink text 'some text', 
4: output only what is in between the href " " (not including the 
   "") for that href

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

ahmed,

Итак, после нескольких быстрых переподготовок по запросам и изучения библиотеки BeautifulSoup, я думаю, вы захотите что-то вроде следующего:

res = requests.get(website_url)
soup = bs4.BeautifulSoup(res.text, 'html.parser')
link = list(filter(lambda x: x['href'] == 'some text', soup.find_all('a')))[0]
print(link['href']) # since you don't specify output to where, I'll use stdout for simplicity

Как выясняется в Beautiful Soup Documentation есть удобный способ получить доступ к любым атрибутам, которые вы хотите, из html-элемента, используя синтаксис поиска по словарю.Используя эту библиотеку, вы также можете выполнять все виды поиска.

Если вы выполняете очистку веб-страниц, может быть также полезно попробовать переключиться на библиотеку, поддерживающую XPATH, которая позволяет вам писать мощные запросы, такие как //a[@href="some text"][1], которая даст вам первую ссылку с URL, равным "некоторому тексту"

0 голосов
/ 15 мая 2018

это должно сделать работу:

from BeautifulSoup import BeautifulSoup

html = '''<a href="some_url">next</a>
<div><a href="another_url">later</a></div>
<h3><a href="yet_another_url">later</a></h3>'''

soup = BeautifulSoup(html)

# iterate all hrefs
for a in soup.find_all('a', href=True):
    print("Next HREF: %s" % a['href'])
    if a['href'] == 'some_text':
       print("Found it!")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...