从BeautifulSoup对象获取URL

时间:2019-02-21 19:03:03

标签: python beautifulsoup

有人将我使用典型调用获得的BeautifulSoup对象(BS4)交给了我的函数:

soup = BeautifulSoup(url)

我的代码:

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

如何从汤对象获取原始URL?我尝试阅读文档和BeautifulSoup源代码...我仍然不确定。

1 个答案:

答案 0 :(得分:2)

如果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只是一个字符串,因此“ Soupify” 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'