带有标头的Python urllib2无效

时间:2014-03-16 14:04:14

标签: python http-headers beautifulsoup urllib2

我正在尝试为某个网址抓取一个页面,我正在使用BeautifulSoup这样做,并请求来自urllib2。我现在遇到的问题是它向我的python客户端发送了一个不同于我的浏览器的URL。所以我到处查看了标题请求,并尽力模仿它们,使其看起来好像我的python客户端是真正的浏览器无济于事。

基本上:

浏览器:ThisIsARealUrlToDocuments.doc Python:ThisIsADummyForNonHumans.doc

我还应该提一下,如果我在浏览器中刷新网址,然后运行一次成功下载的python脚本,那么它会给我一个假人,直到我刷新页面。

我不是任何网络上的老手,所以请帮助。

req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36     (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36')
req.add_header('Referer', url_to_open)

soup = BeautifulSoup(urllib2.urlopen(req).read()

# Dummy video url always contains 779de9061
if '779de9061' in soup.find("div", {'id':'divDownload'}).a['href']:
    return "Failed to get valid video link."
# Returns the found video link    
return soup.find("div", {'id':'divDownload'}).a['href']

我正在尝试抓取的页面是带有视频的任何页面:http://kissanime.com/Anime/Neon-Genesis-Evangelion/Episode-026?id=5260

现在我正在使用一种hacky方法,只需在本机浏览器中快速加载页面然后下载,因为它似乎每页加载一次非虚拟下载。

2 个答案:

答案 0 :(得分:0)

当我尝试curl提供的网址时,我会

$ curl --silent "http://kissanime.com/Anime/Neon-Genesis-Evangelion/Episode-026?id=5260" | grep "divDownload"
<div style="font-size: 14px; font-weight: bold; padding-top: 15px" id="divDownload">

所以从我的位置看起来不像任何奇怪的事情......

为什么不看PyQuery

>>> from pyquery import PyQuery
>>> doc = PyQuery('http://kissanime.com/Anime/Neon-Genesis-Evangelion/Episode-026?id=5260')
>>> print doc.find('#divDownload a')[0].attrib['href']
http://redirector.googlevideo.com/videoplayback?id=779de9061bfeb5d6&itag=37&source=picasa&cmo=sensitive_content=yes&ip=0.0.0.0&ipbits=0&expire=1397587987&sparams=id,itag,source,ip,ipbits,expire&signature=45A93E092F1750C81437ED7F0A5EEB5ABFCD5611.D30926273240E4116B91E85D59FF1268D0E5D5A1&key=lh1

答案 1 :(得分:0)

你需要cookie。

查看以下文件应该对您有所帮助(它完全符合您的尝试) https://github.com/HIGHWAY99/plugin.video.kissanime/blob/master/default.py