2014-07-19 67 views
-2

我想檢查一個給定的網站是否包含robot.txt,讀取該文件的所有內容並打印它。也許還可以將內容添加到字典中會很好。在Python中讀取robots.txt的內容並打印它

我試過玩robotparser module,但無法弄清楚如何去做。

我只想使用標準Python 2.7包裝附帶的模塊。

我一樣@Stefano聖菲利波建議:

from urllib.request import urlopen 

返回

Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    from urllib.request import urlopen 
ImportError: No module named request 

所以,我想:

import urllib2 
from urllib2 import Request 
from urllib2 import urlopen 
with urlopen("https://www.google.com/robots.txt") as stream: 
    print(stream.read().decode("utf-8")) 

,但得到:

Traceback (most recent call last): 

文件 「」,1號線,在 用的urlopen( 「https://www.google.com/robots.txt」)作爲流: AttributeError的:addinfourl實例沒有屬性 '退出'

bugs.python.org似乎是在2.7版本不支持的東西。 事實上,Python的代碼工作正常3 任何想法如何解決這個問題?

+0

你並不需要了解該網站知道'robots.txt'必須的任何結構。它總是在'whatever.site.name/robots.txt'。 – user2357112

+0

@jonsharpe我重申了這個問題。現在是否足夠狹窄?問題已解決,但我想知道是否可以刪除狀態「擱置」。感謝 –

回答

2

是的,robots.txt只是一個文件,下載並打印出來!

的Python 3:

from urllib.request import urlopen 

with urlopen("https://www.google.com/robots.txt") as stream: 
    print(stream.read().decode("utf-8")) 

的Python 2:

from urllib import urlopen 
from contextlib import closing 

with closing(urlopen("https://www.google.com/robots.txt")) as stream: 
    print stream.read() 

注意,路徑總是/robots.txt

如果你需要把內容在一本字典,.split(":").strip()是你的朋友:

+0

您的代碼適用於Python 3,但不適用於Python 2.7 您能否建議我如何使其與Python 2.7協同工作? –

+0

請參閱編輯。然而,除非你有明確的理由堅持使用Python 2,否則你應該使用Python 3。Python 2是遺留的,我不是這麼說的[它是官方的](https://wiki.python.org/莫因/ Python2orPython3)。 –

+0

謝謝@Stefano Sanfilippo我會檢查工具2to3來轉換我的代碼。我不知道爲什麼我有這樣的印象,即使用2.7版本仍然是一個好主意。 –

相關問題