BeautifulSoup returns 缩短了同一网站上网页的网址
BeautifulSoup returns urls of pages on same website shortened
我的参考代码:
import httplib2
from bs4 import BeautifulSoup
h = httplib2.Http('.cache')
response, content = h.request('http://csb.stanford.edu/class/public/pages/sykes_webdesign/05_simple.html')
soup = BeautifulSoup(content, "lxml")
urls = []
for tag in soup.findAll('a', href=True):
urls.append(tag['href'])
responses = []
contents = []
for url in urls:
try:
response1, content1 = h.request(url)
responses.append(response1)
contents.append(content1)
except:
pass
我的想法是,我获取网页的有效负载,然后从中抓取超链接。其中一个链接指向 yahoo.com,另一个指向“http://csb.stanford.edu/class/public/index.html”
但是我从 BeautifulSoup 得到的结果是:
>>> urls
['http://www.yahoo.com/', '../../index.html']
这会带来一个问题,因为脚本的第二部分无法在缩短的第二个 url 上执行。有没有办法让 BeautifulSoup 检索完整的 url?
那是因为网页上的link实际上就是那种形式。页面中的 HTML 是:
<p>Or let's just link to <a href=../../index.html>another page on this server</a></p>
这叫亲戚link。
要将其转换为绝对 link,您可以使用标准库中的 urljoin
。
from urllib.parse import urljoin # Python3
urljoin('http://csb.stanford.edu/class/public/pages/sykes_webdesign/05_simple.html`,
'../../index.html')
# returns http://csb.stanford.edu/class/public/index.html
我的参考代码:
import httplib2
from bs4 import BeautifulSoup
h = httplib2.Http('.cache')
response, content = h.request('http://csb.stanford.edu/class/public/pages/sykes_webdesign/05_simple.html')
soup = BeautifulSoup(content, "lxml")
urls = []
for tag in soup.findAll('a', href=True):
urls.append(tag['href'])
responses = []
contents = []
for url in urls:
try:
response1, content1 = h.request(url)
responses.append(response1)
contents.append(content1)
except:
pass
我的想法是,我获取网页的有效负载,然后从中抓取超链接。其中一个链接指向 yahoo.com,另一个指向“http://csb.stanford.edu/class/public/index.html”
但是我从 BeautifulSoup 得到的结果是:
>>> urls
['http://www.yahoo.com/', '../../index.html']
这会带来一个问题,因为脚本的第二部分无法在缩短的第二个 url 上执行。有没有办法让 BeautifulSoup 检索完整的 url?
那是因为网页上的link实际上就是那种形式。页面中的 HTML 是:
<p>Or let's just link to <a href=../../index.html>another page on this server</a></p>
这叫亲戚link。
要将其转换为绝对 link,您可以使用标准库中的 urljoin
。
from urllib.parse import urljoin # Python3
urljoin('http://csb.stanford.edu/class/public/pages/sykes_webdesign/05_simple.html`,
'../../index.html')
# returns http://csb.stanford.edu/class/public/index.html