使用Beautiful Soup获取源代码中的完整URL

时间:2013-07-31 13:59:02

标签: python

所以我看了一些源代码,我遇到了这段代码

<img src="/gallery/2012-winners-finalists/HM_Watching%20birds2_Shane%20Conklin_MA_2012.jpg"

现在在源代码中链接为蓝色,当您单击它时,它会将您带到该图片所在的完整URL,我知道如何使用Beautiful Soup获取Python源代码中显示的内容想知道如何点击源代码中的链接获得完整的URL?

编辑: 如果给我<a href = "/folder/big/a.jpg"你如何通过蟒蛇或美丽的汤找出那个网址的起始部分?

2 个答案:

答案 0 :(得分:19)

<a href="/folder/big/a.jpg">

这是当前主机的绝对地址。因此,如果HTML文件位于http://example.com/foo/bar.html,那么应用网址/folder/big/a.jpg会导致:

http://example.com/folder/big/a.jpg

即。获取主机名并将新路径应用于它。

Python具有内置urljoin函数来为您执行此操作:

>>> from urllib.parse import urljoin
>>> base = 'http://example.com/foo/bar.html'
>>> href = '/folder/big/a.jpg'
>>> urljoin(base, href)
'http://example.com/folder/big/a.jpg'

对于Python 2,该函数位于urlparse模块中。

答案 1 :(得分:0)

from bs4 import BeautifulSoup
import requests
import lxml

r = requests.get("http://example.com")

url = r.url  # this is base url
data = r.content  # this is content of page
soup = BeautifulSoup(data, 'lxml')
temp_url = soup.find('a')['href']  # you need to modify this selector

if temp_url[0:7] == "http://" or temp_url[0:8] == "https://" :  # if url have http://
        url = temp_url
else:
        url = url + temp_url


print url  # this is your full url