urllib2发送postdata

时间:2012-09-16 14:06:24

标签: python post urllib2

我想直接从他们的网页抓取博彩公司的赌注。目前,我尝试从名为unibet.com的提供商处获取报价。问题:我需要发送一个帖子请求,以便对我想要的引号进行适当的过滤。

因此,我转到以下网页https://www.unibet.com/betting/grid/all-football/germany/bundesliga/1000094994.odds#,其中在赌注部分的上半部分是几个复选框。我取消选中每个方框而不是“匹配”。然后我点击更新按钮并用chrome记录了发布请求。以下屏幕截图演示了正在发送的内容:

enter image description here

之后我得到一个过滤结果,其中只包含匹配的引号。

现在,我只想拥有这些报价。因此我编写了以下python代码:

    req = urllib2.Request( 'https://www.unibet.com/betting/grid/grid.do?eventGroupIds=1000094994' )
    req.add_header("Content-type", "application/x-www-form-urlencoded")
    post_data = [ ('format','iframe'),
                  ('filtered','true'),
                  ('gridSelectedTab','1'),
                  ('_betOfferCategoryTab.filterOptions[1_604139].checked','true'),
                  ('betOfferCategoryTab.filterOptions[1_604139].checked','on'),
                  ('_betOfferCategoryTab.filterOptions[1_611318].checked','false'),
                  ('_betOfferCategoryTab.filterOptions[1_611319].checked','false'),
                  ('_betOfferCategoryTab.filterOptions[1_611321].checked','false'),
                  ('_betOfferCategoryTab.filterOptions[1_604144].checked','false'),
                  ('_betOfferCategoryTab.filterOptions[1_624677].checked','false'),
                  ('_betOfferCategoryTab.filterOptions[1_604142].checked','false'),
                  ('_betOfferCategoryTab.filterOptions[1_604145].checked','false'),
                  ('_betOfferCategoryTab.filterOptions[1_611322].checked','false'),
                  ('_betOfferCategoryTab.filterOptions[1_604148].checked','false'),
                  ('gridSelectedTimeframe','')]
    post_data = urllib.urlencode(post_data)
    req.add_header('Content-Length', len(post_data ))
    resp = urllib2.urlopen(req, post_data )
    html = resp.read()

问题:我得到了所有报价和投注类型的完整列表,而不是过滤结果,就像检查了所有复选框一样。我不明白为什么我的python请求会返回未过滤的数据?

1 个答案:

答案 0 :(得分:1)

该网站将您的偏好设置存储在会话cookie中。由于您没有捕获并发送相应的cookie,因此在更新站点时会显示其默认结果。

试试这个:

import cookielib

cookiejar = cookielib.CookieJar()
opener = urllib2.build_opener(
    urllib2.HTTPRedirectHandler(),
    urllib2.HTTPHandler(debuglevel=0),
    urllib2.HTTPSHandler(debuglevel=0),
    urllib2.HTTPCookieProcessor(cookiejar),
)

现在,不要使用urllib2.open()而只是将opener作为函数调用调用:opener()并传递你的args。