使用 urlparse 模块对链接进行补全。
示例代码:
from urllib.parse import urlparse
import requests
from bs4 import BeautifulSoup
url = 'http://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
links = soup.find_all('a')
for link in links:
href = link.get('href')
if href:
parsed_url = urlparse(href, scheme='http', allow_fragments=False)
if not parsed_url.netloc:
parsed_url = parsed_url._replace(netloc=urlparse(url).netloc)
link['href'] = parsed_url.geturl()
print(soup)
这里的做法是使用 urlparse
解析链接,并补全缺失的部分。如果链接不包含主机名,则使用原始链接的主机名进行补全。最后,将链接赋回原始元素的 href
属性。