【问题标题】:scraping data from simple website - change 'post' to 'get'从简单的网站抓取数据 - 将“post”更改为“get”
【发布时间】:2012-06-06 14:53:22
【问题描述】:

我访问了这个网站: http://www.avcodes.co.uk/airlcodesearch.asp

并且,选择了最后一个选项:

Select a letter for ICAO Codes: and chose "B"

然后点击Submit.

我使用来自 Firefox 的 Tamper Data 和 Live HTTP Headers 来监控进度。

而且,一切都很好.. 实现相同效果所需的直接 URL 是这样的:

http://www.avcodes.co.uk/airllistres.asp?statuslst=Y&iataairllst=&icaoairllst=B&B1=Submit

但是,当使用上述 URL 时..数据不会返回。

我缺少什么以及如何找到正确的 URL。

这个练习的目的是一旦我知道了 URL。我将使用一个 python 脚本循环从 A 到 Z 并从所有页面获取内容。

请帮忙。

【问题讨论】:

    标签: python http-post web-scraping http-get


    【解决方案1】:

    我假设您已获得该网站的许可,可以使用他们的数据库,并且您可以抓取他们的网站。在任何其他情况下,根据司法管辖区的不同,这样做可能是非法的。

    这里的问题是您正在使用 GET 来检索内容,但该网站需要一个 POST。 Get 和 POST 不是等价的,尽管一些程序员认为它们是相同的(例如,在 PHP 中,您可以使用 $_REQUEST 代替 $_GET$_POST)。这个网站不像他们,所以你必须发布到这​​个网站。

    在 Python 中,您可以将数据发布到这样的 url:

    import urllib2
    u = urllib2.urlopen("http://www.avcodes.co.uk/airllistres.asp", "statuslst=Y&iataairllst=&icaoairllst=B&B1=Submit")
    print u.read()
    

    【讨论】:

    • 谢谢.. 那行得通!为什么要通过我在问题中强调的方法在一些期望发布的网站上工作。所以,你是说我不能依赖这个……对吧?
    • 一些 Web 应用程序被编写为可互换地接受查询字符串或 POST 请求正文中的值;有些不是。如果一个应用只在一个地方或另一个地方寻找值,你必须将它们传递到它期望的地方。
    【解决方案2】:

    POST 和 GET 不等价。如果网站被编写为只接受 GET,那就可以了。

    不过,您也可以轻松编写使用 POST 的脚本。

    【讨论】:

      【解决方案3】:

      那是因为你需要在那个页面上使用 POST 方法。

      试试这个:

      pip install requests
      

      然后:

      >>> import requests
      >>> r = requests.post('http://www.avcodes.co.uk/airllistres.asp?statuslst=Y&iataairllst=&icaoairllst=B&B1=Submit')
      >>> r.text
      

      但是,除了上述查询字符串参数之外,您似乎还需要弄清楚一些发布数据才能真正返回数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-06
        • 1970-01-01
        • 2014-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多