从可能使用会话ID的安全URL抓取页面

2 投票
2 回答
1303 浏览
提问于 2025-04-15 21:24

如何抓取像这样的页面:https://www.procom.ca/JobList.aspx?keywords=&Cities=&reference=&JobType=0

这个页面是安全的,看起来需要一个来源网址。我用wget或者httplib2都无法获取任何内容。

如果你在浏览器中打开这个页面,你会看到一个列表,但在命令行中却无法获取到。 https://www.procom.ca/jobsearch.aspx

我对在命令行中获取数据感兴趣。

2 个回答

0

你在发送POST或GET请求时,具体发送了哪些数据呢?我建议你可以通过Firebug的网络面板查看一下POST/GET消息。在那个页面上,有很多隐藏的值,我觉得这些值是和时间有关的,每次加载页面时可能都会变化,而且可能只在某次有效。所以你可以先加载页面,获取这些值,然后再通过POST消息发送它们。例如,看看这些:

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTEwODIzNjMxMzEPFgIeEUdyaWRTb3J0RGlyZWN0aW9uCyo..." />
3

正如你所猜测的,这个操作需要一个来源地址(referer)。下面的代码可以正常工作:

   import urllib2
   urlopen = urllib2.urlopen
   Request = urllib2.Request
   url = 'https://www.procom.ca/JobList.aspx?keywords=&Cities=&reference=&JobType=0'
   headers =  {'Referer' : 'http://www.stackoverflow.com'}
   req = Request(url, None, headers)
   handle = urlopen(req)
   print handle.read()

撰写回答