这是我的第一个问题,并且感谢您可以向我提供一些提示。
我正在使用python开发一个蜘蛛来抓取网站的赔率条目。在该网站中,有一个onclick事件可以弹出一个窗口来显示赔率的变化。我在Chrome上检查了它是否链接到了网址," http://odds.500.com/fenxi1/inc/yazhiajax.php?fid=554629&id=3&t=" + str(t)+"& r = 1" 这里t是一个Javascript(新日期).getTime()。我可以看到Chrome的预览和响应中的赔率变化。但是,当我在代码下面运行以获取数据时。它显示为空白。当我通过Chrome导航到网址时,它显示为空白。
import datetime
import re
import urllib.request
import lottery
import gzip
import time
# getTime simulates Javascript getTime function
def getTime():
return int(time.time() * 1000)
user_agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'"
referer = "http://odds.500.com/fenxi/yazhi-554629.shtml"
headers = {'User-Agent': user_agent, 'Referer': referer}
t = getTime()
url_str = "http://odds.500.com/fenxi1/inc/yazhiajax.php?fid=554629&id=3&t=" + str(t) + "&r=1"
print(url_str)
req = urllib.request.Request(url_str, headers = headers)
response = urllib.request.urlopen(req).read()
print(response)
答案 0 :(得分:1)
HTTP请求不仅包含URL。您可以在Chrome的“开发人员”工具(ctrl + shift + I)中查看“网络”标签中的所有请求和响应。
我在Chrome中打开了您的引荐网址(http://odds.500.com/fenxi/yazhi-554629.shtml)并点击了"盘"中的一个项目。柱。我相信这就是你想要模仿的东西。它发送了一个包含许多cookie的请求。那可能是你的问题。
您可能应该让您的抓取工具打开第一个网址,收集所有Cookie,然后使用Cookie进行第二次重新设置。
但这可能是一个挑战,取决于你需要做些什么来收集cookie。
另请注意,当您的响应不是完整的HTML文档时 - 它是HTML段的JSON列表。
编辑:找到答案
我不得不再次检查标题。如果您只是添加此标题,则会收到回复:X-Requested-With: XMLHttpRequest
。所以:
url = 'http://odds.500.com/fenxi1/inc/yazhiajax.php?fid=554629&id=3&t=1449930953112&r=1'
headers = {'X-Requested-With': 'XMLHttpRequest'}
urllib.request.urlopen(urllib.request.Request(url, headers=headers)).read()
它会返回一些二进制数据......我会留给您解码。提示:respnse标题说Content-Encoding:gzip
,所以它是压缩的......
答案 1 :(得分:0)
使用正确的标头可以解决问题。请尝试检查以下标题:
headers = {
'Host': "twitter.com",
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; Win64; x64)",
'Accept': "application/json, text/javascript, */*; q=0.01",
'Accept-Language': "de,en-US;q=0.7,en;q=0.3",
'X-Requested-With': "XMLHttpRequest",
'Referer': url,
'Connection': "keep-alive"
}
答案 2 :(得分:-1)
我宁愿使用urllib3。
使用urllib3获取页面:
import urllib3
url = http://odds.500.com/fenxi1/inc/yazhiajax.php?fid=554629&id=3&t=" + str(t) + "&r=1"
http = urllib3.PoolManager()
page = http.request('GET',url)
你有你的页面。