Saya baru mengenal Python dan Scrapy, saya telah menggores walmart.com dengan hasil yang agak positif.

Itu berfungsi selama seminggu dan bahkan 25 jam yang lalu namun tadi malam saya mulai mendapatkan respons ini, itu tidak muncul sebagai kesalahan dalam scrapy, inilah yang tergores dan dikembalikan melalui file txt.

<!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>

Saya telah meneliti dan sebagian besar berpikir jarang bahwa 500 berarti diblokir/dilarang, apakah mungkin saya telah mengubah sesuatu atau dapat mengubah sesuatu untuk menghasilkan hasil lagi?

Bantuan apa pun akan sangat dihargai, saya sudah mencoba produk yang berbeda di WM.com dan mendapatkan yang sama, saya dapat menjangkaunya melalui browser tanpa masalah.

0
Artie 12 November 2017, 21:14

1 menjawab

Jawaban Terbaik

Pengikis Anda mungkin telah diblokir dari situs, karena Anda mendeteksi pengikisan atau jahat dengan cara lain (mis. mengirim terlalu banyak permintaan per menit , tidak mengikuti robots.txt).

Karena Anda mengatakan bahwa itu masih berfungsi beberapa jam yang lalu, saya berasumsi bahwa larangan itu berbasis IP. Anda sekarang dapat melakukan hal berikut:

  • apakah semua permintaan dari scrapy dilarang atau mungkinkah melakukan beberapa saat Anda memulai scraper Anda dan kemudian setelah beberapa permintaan berhenti berfungsi?
  • lihat apakah Anda dapat menjangkau Walmart.com atau https://www.walmart.com/ip/Pringles-Loaded-Baked-Potato-Potato-Crisps-5-5-oz-Canister/144650857 dari browser biasa, tetapi dengan IP yang sama (jika berada di server, Anda dapat menggunakan curl atau wget atau membuat terowongan SSH dari PC lokal Anda ke server Anda)
    • jika ini berhasil, larangan tidak hanya didasarkan pada IP, jadi Anda dapat mencoba mengubah USER_AGENT scrapy dan melihat apakah itu berfungsi lagi
  • coba pengaturan kasar Anda yang sama dari PC lain (tetapi hanya sebentar) dan lihat apakah itu berhasil (jika ya, maka larangan tersebut mencakup setidaknya IP)

Selanjutnya, Anda harus mengurangi tingkat perayapan Anda. Saya berasumsi Anda merangkak terlalu agresif. Dalam kebanyakan kasus itu cukup untuk hanya mengurangi tingkat perayapan. Namun, untuk walmart saya juga percaya bahwa mereka memiliki langkah-langkah yang lebih maju seperti mendeteksi robot dari pola kunjungan URL dan sejenisnya (maksud saya, mungkin walmart bahkan dapat mendeteksi Anda jika Anda hanya melakukan permintaan per menit saja).

Beberapa ide untuk menghindari masalah pelarangan:

  • kurangi tingkat perayapan dengan setelan DOWNLOAD_DELAY atau AUTOTHROTTLE_*
  • gunakan cluster perayapan dengan rotasi IP
    • scrapinghub menawarkan ini, tetapi ini tidak gratis, dan karena scrapinghub digunakan oleh banyak orang, proxy mereka mungkin memiliki masalah yang sama
  • jangan gunakan agen pengguna default scrapy (tapi saya berasumsi Anda sudah mengubahnya, setidaknya itu bukan masalah dalam situasi Anda sekarang)

Catatan kaki

Ya, per menit. Dalam perayapan web normal, kami mencoba untuk menunda beberapa detik untuk sebagian besar situs web. Beberapa menggunakan rumus factor * response-time-of-website dalam perayapan sopan di mana faktornya sedikit berbeda, tetapi selalu > 1. Ini berarti waktu tunda menurut rumus ini juga biasanya > 1 detik, saya bahkan pernah mendengar tentang faktor-faktor di sekitar 30, artinya waktu tunda bisa 15 detik atau lebih.

1
aufziehvogel 12 November 2017, 18:44