【问题标题】:Cannot get Python request GET to work with spitogatos.gr无法获取 Python 请求 GET 以使用 spitogatos.gr
【发布时间】:2020-08-12 16:36:51
【问题描述】:

我一直在尝试从 www.spitogatos.gr 抓取数据,但没有成功。 我的代码看起来像:

import requests

headers={
    'Host': 'www.spitogatos.gr',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0',
'Accept': 'application/json; charset=utf-8',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate, br',
'Referer': 'https://www.spitogatos.gr/',
'Content-Type': 'text/plain; charset=utf-8',
'Origin': 'https://www.spitogatos.gr'
}

url = "https://www.spitogatos.gr/search/results/residential/sale/r100/m2007m/propertyType_apartment/onlyImage"
req = requests.get(url, headers=headers)
print (req)
print (req.content)

虽然我得到响应状态 200,但我得到的不是任何有用的内容,而是 HTML 消息:

请原谅我们的打扰当您浏览有关您的 浏览器让我们认为你是机器人。这有几个原因 可能发生:

您已在网络浏览器中禁用 JavaScript。你是高级用户 以超人的速度浏览这个网站。您已禁用 您的网络浏览器中的 cookie。第三方浏览器插件,例如 Ghostery 或 NoScript 正在阻止 JavaScript 运行。 ...

现在我查看了 Firefox 以了解它发送的请求类型,尽管它发送了一个 POST 请求,但我确实复制了 Firefox 随请求发送的 Cookie。所以我的标题看起来像:

headers={
    'Host': 'www.spitogatos.gr',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0',
'Accept': 'application/json; charset=utf-8',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate, br',
'Referer': 'https://www.spitogatos.gr/',
'Content-Type': 'text/plain; charset=utf-8',
'Origin': 'https://www.spitogatos.gr',
'Cookie':'PHPSESSID=iielr7e8boibudjmln9ubd3i62; spitogatosS=areaIDs%255B0%255D%3D2007%26propertyCategory%3Dresidential%26listingType%3Dsale; currentCurrency=EUR; spitogatosInfoBar_shortCuts=false; openedTabs=; _ga=GA1.2.1557987790.1597249012; _gid=GA1.2.507964674.1597249012; _gat_UA-3455846-10=1; _gat_UA-3455846-2=1; _hjid=dfd027d6-e6f1-474c-a427-c26d5f2ca64c; _cmpQcif3pcsupported=1; reese84=3:T2t/w3VdpNG5w9Knf78l7w==:Gg20L4RyGJffieidEn4Eb1Hmb3wyAtPQfmH/5WYHWfKjzLmjhkGCoTR0j5UUmKxIbkzZltWBeJ6KaPVCFa5qiaddz2Cn6OltrBdp…2YIriDYTOwLMNNxEFPDPkL/Lw2cGC0MwJ3uUg6kSP/VgPp/AYkIcVjXLgqjSwmAdGl4oQDyrAKDpn9PcN/fWSUjPrtAOAJzkWcZ7FPCfvcsnAo9oSNpXtAaZ0JLzgMKXqQqP8Jrakjo4eL9TSdFKIVEJZos=:eBpByDUvhUkR0pGwgnYacTV3VeYzKEi+4pJpI3mhQ6c=; _fbp=fb.1.1597249012911.16321581; _hjIncludedInPageviewSample=1; eupubconsent=BO4CN1PO4CN1PAKAkAENAAAAgAAAAA; euconsent=BO4CN1PO4CN1PAKAkBENDV-AAAAx5rv6_77e_9f-_fv_9ujzGr_v_e__2mccL5tn3huzv6_7fi_-0nV4u_1tfJdydkh-5YpCjto5w7iakiPHmqNeZ1nfmz1eZpRP58E09j53zpEQ_r8_t-b7BCHN_Y2v-8K96lPKACA; spitogatosHomepageMap=0'.encode('utf8')
}

现在,当我这样做时,请求有时会起作用,有时它会给我上述消息。所以我不断刷新 Firefox 并将 Cookie 复制到我的 python 脚本中。 这是一个偶然的机会。

我也一直在尝试复制 firefox 的确切 POST 请求(相同的数据、参数和标头),但这给了我相同的错误消息。

无论我进行多少请求或刷新,Firefox 似乎都没有这个问题。

有人可以帮帮我吗? 谢谢

【问题讨论】:

    标签: web-scraping cookies get python-requests


    【解决方案1】:

    指定User-AgentAccept-Language 我每次都能得到正确的响应(尝试将User-Agent 标头更改为Linux 标头,如示例所示):

    import requests
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0',
        'Accept-Language': 'en-US,en;q=0.5'
    }
    url = 'https://www.spitogatos.gr/search/results/residential/sale/r100/m2007m/propertyType_apartment/onlyImage'
    
    print( requests.get(url, headers=headers).text )
    

    【讨论】:

    • 不幸的是,同样的“Bot-Message”也发生在这个上。我认为它可能是服务器端。如果你有一段时间没有提出任何请求,它会起作用,但如果你做的太多,它会再次开始抱怨。不过 Firefox 似乎还可以
    • @vzografos 该站点使用 Cloudflare 作为 CDN,因此我认为它会检测到太多请求。尝试在请求之间放置time.sleep()
    • 是的,我就是这么做的。让我们看看它是否有什么作用。真正奇怪的是它不会影响 Firefox。这让我认为这与IP无关。我尝试在每次请求后修改 python 中的用户代理,但它仍然阻塞。所以我唯一的希望是请求之间的时间延迟
    • 所以我也尝试通过打开 Gecko 网页来使用 selenium。这也会引发此 Bot 消息,然后是一系列验证码。所以一个解决方案是尝试通过 Selenium 进行刮,然后暂停,直到手动解决 CAPTCHA 并继续刮。不确定为什么 Gecko 浏览器不会被 Firefox 标记。必须是标题...
    【解决方案2】:

    我已经解决了这个问题:其实答案很简单。阻塞的原因是“adblocker Ultimate”。 因此,如果您有一些添加阻止程序,您可以尝试停用它们,看看,因为当您使用它们时,网站可能会将您识别为机器人。 但要知道,我有 3 个添加拦截器(addblock plus、ublock origin 和 adblocker Ultimate),似乎只有 adblocker Ultimate(最近安装,而我几个月以来一直有其他)造成了麻烦。 如果您遇到同样的情况,我希望此解决方案也可以为您工作;或者可以帮助其他人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      相关资源
      最近更新 更多