Если переменная 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'