有人将我使用典型调用获得的BeautifulSoup对象(BS4)交给了我的函数:
soup = BeautifulSoup(url)
我的代码:
def doSomethingUseful(soup):
url = soup.???
如何从汤对象获取原始URL?我尝试阅读文档和BeautifulSoup源代码...我仍然不确定。
答案 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'