1

完全なURLを見つけるための私の通常の方法は次のとおりです。

resp = urllib.request.urlopen('http://www.example.com')
base_url = resp.geturl()
# find the wanted (relative) url in the resp by using BeautifulSoup4
full_url = urljoin(base_url, relative_url)

ただし、http://www.titanquest.net/tq-forum/forums/72-Underlordなどの一部の Web サイトでは、base_url と full_url が間違っています。

>>> full_url
'http://www.titanquest.net/tq-forum/forums/72-Underlord'
>>> relative_url
'threads/43456-Epic-items?s=26260c54fd856499bff7a57e3c7ceb94'
>>> urljoin(full_url, relative_url)
'http://www.titanquest.net/tq-forum/forums/threads/43456-Epic-items?s=26260c54fd856499bff7a57e3c7ceb94'

正しい URL は次のとおりです。

http://www.titanquest.net/tq-forum/threads/43456-Epic-items?s=26260c54fd856499bff7a57e3c7ceb94

私の質問は、正しいbase_url、したがってfull_urlを生成する方法です。

4

1 に答える 1

2

ブラウザは通常、現在のページの場所を相対URLの基礎として使用し、を使用するとurljoinその動作が正しくシミュレートされます。

ただし、返されるHTMLに<base />タグが含まれている場合、ブラウザはそのタグで指定されたURLを相対URLを解決するための基礎として使用します。<base />タグはHTMLヘッドの一部です。

の応答を解析してそのhttp://www.titanquest.net/tq-forum/forums/72-Underlordようなタグがあるかどうかを判断し、ページのURLの代わりにその値を使用して相対URLを判断する必要があります。<base href="link" />リンク値自体は相対的である可能性があります。その場合、最初にドキュメントの場所に基づいて絶対値にする必要があります。

この特定のケースでは、Webページに次のような<base />タグが含まれています。

<base href="http://www.titanquest.net/tq-forum/" /><!--[if IE]></base><![endif]-->
于 2012-09-26T06:59:19.497 に答える