2015-12-28 42 views
0

我解析了一些站點地圖的xml,並且我偶然發現了一個特別實現了cloudflare ddos​​保護的站點。我本來是這樣的:解析帶有標題的XML

from xml.dom import minidom 
import urllib, urllib2 

url='http://rsvpgallery.com/sitemap_products_1.xml?from=1&to=9999999999' 
xml = urllib.urlopen(url).read() 

檢查XML變量,我們可以看到,它導致的CloudFlare保護頁面,該網站已根據我的瀏覽器禁用簽名我的接入。

要解決這個問題,我想實現添加User-Agent頭。 我想的是這樣的:

... 
req = urllib2.Request(url) 
req.add_header('User-Agent', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/47.0.2526.106 Chrome/47.0.2526.106 Safari/537.36') 
resp = urllib2.urlopen(req) 
url = resp.read() 
... 

但是,當我去與這個新的網址變量聲明XML我得到這個錯誤:

xml = urllib.urlopen(url).read() 
    File "/usr/lib/python2.7/urllib.py", line 87, in urlopen 
    return opener.open(url) 
    File "/usr/lib/python2.7/urllib.py", line 205, in open 
    return self.open_unknown(fullurl, data) 
    File "/usr/lib/python2.7/urllib.py", line 217, in open_unknown 
    raise IOError, ('url error', 'unknown url type', type) 
IOError: [Errno url error] unknown url type: '?xml%20version=%221.0%22%20encoding=%22utf-8%22?%3e%0a%3curlset%20xmlns=%22http' 

上如何去任何想法或意見修復這將不勝感激。

回答

1

它應該是爲你工作:

from xml.dom import minidom 
import urllib2 as net 

headers = { 
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:43.0) Gecko/20100101 Firefox/43.0', 
} 

url='http://rsvpgallery.com/sitemap_products_1.xml?from=1&to=9999999999' 
req = net.Request(url, headers=headers) 
xml = net.urlopen(req).read() 

print xml 

你的腳本應該反正工作......看來你已經通過交換XML VAR的URL變種,它只是有點慌亂。

+0

快速高效的響應!謝謝! –