使用标头解析XML

时间:2015-12-28 17:42:04

标签: python xml parsing urllib2 sitemap

我正在解析一些sitemap的xml,我偶然发现了一个实现cloudflare ddos​​保护的网站。我原来有这样的事情:

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()
...

但是当我用这个新的url变量声明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 个答案:

答案 0 :(得分: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 var,这只是有点混乱。