Скрапинг Walmart.com с помощью Scrapy и получение общей ошибки 500

Я новичок в Python и Scrapy, я очищал walmart.com с несколько положительными результатами.

Он работал в течение недели и даже 25 часов назад, однако прошлой ночью я начал получать этот ответ, он не отображается как ошибка в scrapy, это то, что очищается и возвращается через текстовый файл.

<!doctype html>
<html lang="en-US" itemscope itemtype="http://schema.org/WebPage">
<head>
    <title>Omnivore Walmart</title>

</head>
<body id="WalmartBodyId" class="WalmartMainBody SimpleMode">



<!-- SiteCatalyst code version: H.23.3
Copyright 1996-2009 Adobe, Inc. All Rights Reserved
More info available at http://www.omniture.com
-->


<script language="JavaScript" type="text/javascript">
var s_account="walmartcom";
</script>
<script language="JavaScript" type="text/javascript" src=" https://secure.walmartimages.com/webanalytics/wmStat/wmStat.jsp"></script>
<script language="JavaScript" type="text/javascript">

var omni = {
"adid" : s_omni.getQueryParam('adid'),
"fbref" : s_omni.getQueryParam('fb_ref'),
"sourceid" : s_omni.getQueryParam('sourceid'),
"povid" : s_omni.getQueryParam('povid'),
"findingMethod" : s_omni.getQueryParam('findingMethod'),
getCampaignId : function() {
if(this.adid) { return this.adid; }
else if (this.fbref) { return this.fbref.split('_')[1]; }
else if (this.sourceid){ return this.sourceid; }
else { return ''; }
}
};
s_omni.pageName="Akamai Error 500:https://www.walmart.com/ip/Pringles-Loaded-Baked-Potato-Potato-Crisps-5-5-oz-Canister/144650857";
s_omni.channel="Walmart.com";
s_omni.campaign=omni.getCampaignId();
s_omni.prop1="Akamai Error";
s_omni.prop2="Akamai Error 500";
s_omni.prop48="Akamai 500:Generic Error - AKAMAI REFERENCE ERROR NO:3.1be3ab42.1510509312.48a15f11"; 

var s_code=s_omni.t();if(s_code) document.write(s_code);
</script>

<br>
    <table>
        <tr>
            <td>Error Page</td>
        </tr>

    </table>

    <br>
        <table>
            <tr>
                <td>Could not connect to server</td>
            </tr>
        </table>

</body>
</html>

Я исследовал, и большинство думает, что редко когда 500 означает заблокировано/забанено, возможно ли, что я что-то подправил или могу подправить что-то, чтобы снова получить результаты?

буду очень признателен за любую помощь, я попробовал другой продукт на WM.com и получил то же самое, я без проблем могу получить к нему доступ через браузер.


person Artie    schedule 12.11.2017    source источник
comment
Walmart понял, что вы копаете их сайт, и забанил вас.   -  person kindall    schedule 12.11.2017


Ответы (1)


Ваш парсер, вероятно, был заблокирован на сайте, потому что вы либо были обнаружены при парсинге, либо каким-то другим образом были злонамеренны (например, отправляли слишком много запросов в минуту ¹, не следили за robots.txt).

Поскольку вы говорите, что это еще работало несколько часов назад, я предполагаю, что бан основан на IP. Теперь вы можете сделать следующее:

  • все ли запросы от scrapy забанены или можно выполнить несколько, когда вы запускаете свой парсер, а потом после нескольких запросов он перестает работать?
  • see if you can reach Walmart.com or https://www.walmart.com/ip/Pringles-Loaded-Baked-Potato-Potato-Crisps-5-5-oz-Canister/144650857 from a normal browser, but the same IP (if it is on a server, you could use curl or wget or create an SSH tunnel from your local PC to your server)
    • if this works, the ban is not only based on IP, so you could try to change scrapy's USER_AGENT and see if it works again
  • попробуйте ту же настройку склепа с другого ПК (но ненадолго) и посмотрите, работает ли она (если да, то бан включает как минимум IP)

Затем вы должны уменьшить скорость сканирования. Я предполагаю, что вы слишком агрессивно ползали. В большинстве случаев достаточно просто уменьшить скорость сканирования. Тем не менее, для Walmart я также мог бы поверить, что у них есть более продвинутые меры, такие как обнаружение роботов по шаблонам посещения URL-адресов и тому подобное (я имею в виду, может быть, Walmart может даже обнаружить вас, если вы делаете запросы только в минуту).

Некоторые идеи, как обойти проблемы с баном:

  • уменьшить скорость сканирования с помощью настроек DOWNLOAD_DELAY или AUTOTHROTTLE_*
  • use a crawling cluster with IP rotation
    • scrapinghub offers this, but it's not for free, and since scrapinghub is used by lots of people, their proxies might have the same issues
  • не используйте пользовательский агент по умолчанию для scrapy (но я предполагаю, что вы уже изменили это, по крайней мере, сейчас это не проблема в вашей ситуации)

Сноски

¹ да, в минуту. При обычном веб-сканировании мы пытаемся установить задержку в несколько секунд для большинства веб-сайтов. Некоторые используют формулу factor * response-time-of-website в вежливом обходе, где коэффициент немного отличается, но всегда > 1. Это означает, что время задержки по этой формуле также обычно будет > 1 секунды, я даже слышал о коэффициентах около 30, что означает, что время задержки может составлять 15 секунд и более.

person aufziehvogel    schedule 12.11.2017
comment
Спасибо, вот этого я и опасался, я не собирался злонамеренно ползать, я слишком агрессивно тестировал. Я ценю ваш вклад - person Artie; 13.11.2017