Получить URL из объекта BeautifulSoup - PullRequest
0 голосов
/ 21 февраля 2019

Кто-то передает моей функции объект BeautifulSoup (BS4), который он получил с помощью типичного вызова:

soup = BeautifulSoup(url)

мой код:

def doSomethingUseful(soup):
    url = soup.???

Как получить оригиналURL из супового объекта?Я пытался читать документы и исходный код BeautifulSoup ... Я до сих пор не уверен.

1 Ответ

0 голосов
/ 21 февраля 2019

Если переменная url является строкой фактического URL, то вам следует просто забыть здесь BeautifulSoup и использовать ту же самую переменную url.Вы должны использовать BeautifulSoup для анализа HTML-кода, а не простой URL-адрес.На самом деле, если вы попытаетесь использовать его таким образом, вы получите предупреждение:

>>> from bs4 import BeautifulSoup
>>> url = "https://foo"
>>> soup = BeautifulSoup(url)
C:\Python27\lib\site-packages\bs4\__init__.py:336: UserWarning: "https://foo" looks like a URL. Beautiful Soup is not an HTTP client. You should probably use an HTTP client like requests to get the document behind the URL, and feed that document to Beautiful Soup.
  ' that document to Beautiful Soup.' % decoded_markup

Поскольку URL-адрес является просто строкой, BeautifulSoup на самом деле не знает, что с ним делать, когда вы «супифицируете»это, за исключением того, чтобы обернуть это в основной HTML:

>>> soup
<html><body><p>https://foo</p></body></html>

Если вы все еще хотите извлечь URL из этого, вы можете просто использовать .text для объекта, так как это единственное, что есть:

>>> print(soup.text)
https://foo

Если, с другой стороны, url - это , то вовсе не - это вообще URL-адрес, а скорее набор HTML-кода (в этом случае имя переменной будет очень вводить в заблуждение),тогда как вы извлечете конкретную ссылку изнутри, возникнет вопрос о том, как она в вашем коде.Выполнение find для получения первого тега a, затем извлечение значения href может быть в одну сторону.

>>> actual_html = '<html><body><a href="http://moo">My link text</a></body></html>'
>>> newsoup = BeautifulSoup(actual_html)
>>> newsoup.find('a')['href']
'http://moo'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...