网站爬取:邮递员和浏览器的响应不同

Website crawling: responses are different for postman and browser

我想抓取网站 https://www.ups.com/de/de/shipping/surcharges/fuel-surcharges.page。在那里,该公司将他们添加到发票金额中的所有燃油附加费付清。我需要这些信息来正确计算一些成本。不幸的是,UPS 目前不愿意定期以可读格式向我发送数据。于是,我想到了自己爬网站获取信息。

不幸的是,当使用邮递员或我的爬虫工具rcrawler时,对站点的GET请求隐藏了数据tables。我如何才能像使用 chrome 浏览器时那样欺骗网站 return 所有数据?

例如,标准层费用 table 在邮递员中看起来像这样(仅包含列的标题但没有值):

<div class="ups-contentBlock_wrap clearfix">
    <p>Der Standard Service Treibstoffzuschlag gilt f&uuml;r
        alle UPS Standard Sendungen. Die &Auml;nderungen des
        auf den n&auml;chsten Cent gerundeten Zuschlages
        werden am Montag jeder Woche wirksam und basieren
        auf den von der Generaldirektion der
        Europ&auml;ischen Kommission (ECDG) festgesetzten
        Verbraucherpreisen f&uuml;r Dieselkraftstoffe,
        einschliesslich der Z&ouml;lle und Steuern zweier
        Vorwochen. Der Zuschlag f&uuml;r die Woche vom 6.
        Februar 2017 basiert auf dem Dieselkraftstoffpreis
        f&uuml;r die Woche vom 23. Januar 2017.
        W&ouml;chentliche Aktualisierungen werden von der
        Generaldirektion Energie der Europ&auml;ischen
        Kommission (ECDG) f&uuml;r Energie und Verkehr im
        &Ouml;lbericht ver&ouml;ffentlicht.</p>
    <p>Der Treibstoffzuschlag f&uuml;r den UPS
        Standard-Service basiert auf den Angaben in der
        folgenden Tabelle:</p>
    <div class="ups-table fuel-surcharge">
        <table id="DieselFuelPriceStandardFuelSurcharge">
            <thead>
                <tr>
                    <th colspan="3">Dieseltreibstoffpreis
                        (EUR pro 1.000 Liter)</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <th>
                        <p>Mindestens</p>
                    </th>
                    <th>
                        <p>Aber weniger als</p>
                    </th>
                    <th>
                        <p>Zuschlag</p>
                    </th>
                </tr>
            </tbody>
        </table>
    </div>
</div>
<div class="ups-contentBlock_wrap clearfix">
    <p>Die H&ouml;he des Treibstoffzuschlags kann sich ohne
        vorhergehende Ank&uuml;ndigung &auml;ndern. Wenn der
        Treibstoffzuschlag &uuml;ber 14,50% ansteigt oder es
        zu &Auml;nderungen der Grenzwerte kommt, wird die
        obenstehende &Uuml;bersicht aktualisiert. Ungeachtet
        der durch die ECDG genannten durchschnittlichen
        Treibstoffpreise oder der obenstehenden
        &Uuml;bersicht werden die aktuellen oben
        ver&ouml;ffentlichen prozentualen Anteile des
        Treibstoffzuschlages f&uuml;r die festgelegten
        Zeitr&auml;ume ber&uuml;cksichtigt.</p>
</div>

将此与浏览器结果进行比较即可发现问题所在。

你只是天真地下载了网站源

如果您在浏览器中打开开发者工具(通常是 F12)并打开“网络”选项卡,然后重新加载页面,您将看到所有发出的请求。

您会注意到几个 javascript 文件,并且在该列表的某处您还会看到一个名为 de.json 的文件。如果您查看该请求的响应表,您将看到所有费率显示为 json。

其中一个 javascript 文件对此进行解析并在浏览器的 table 中显示此数据。 Postman 没有 javascript 翻译;实际上它确实如此,但它的使用方式与网络浏览器不同。因此请求整个页面不会向您显示此数据。

但是,如果您 GET https://www.ups.com/assets/resources/fuel-surcharge/de.json,您将获得您想要的数据。