【问题标题】:How does this site know I'm a scraper?这个网站怎么知道我是爬虫?
【发布时间】:2017-01-27 11:06:10
【问题描述】:

我正在尝试从 this web form 中提取结果(示例 ID:15740175)。实际上,我正在从 Scrapy 发送一个 POST 请求,就像表单一样。

我正在使用非阻塞 IP 工作 - 我可以从这台机器上的 Firefox 成功发出请求。我正在使用禁用了 JavaScript 和 cookie 的 Firefox,因此该站点不需要 JS 或 cookie 即可返回结果。

这是我的 Scrapy 代码:

allowed_domains = ['eservices.landregistry.gov.uk']
start_urls = []
_FORM_URL = "http://eservices.landregistry.gov.uk/www/wps/portal/!ut/p/b1/" \
            "hc7LDoIwEAXQb-ELOrQFu60EgSgg8hDYEFQ0GHksCIZ-veBODTK7Sc69MyhFMU" \
            "rrvC9veVc2df6Y9lTNCGZUlik2GVFXYCkbg8iBQoCSESR_gCEv5Y8oBpr5d9ba" \
            "QxfvhNYHd-ENjtCxLTg44vy0ndP-Eh3CNefGoLMa-UU95tKvanfDwSJrd2sQDw" \
            "OoP-DzNsMLYPr9DWBmOCDHbKoCJSNbzfWwiKK2CvvyoF81LkkvDLGUgw!!/dl4" \
            "/d5/L0lDU0lKSmdwcGlRb0tVUW9LVVEhL29Gb2dBRUlRaGpFQ1VJZ0FJQUl5Rk" \
            "FNaHdVaFM0SldsYTRvIS80RzNhRDJnanZ5aERVd3BNaFFqVW81Q2pHcHhBL1o3" \
            "XzMyODQxMTQySDgzNjcwSTVGRzMxVDUzOFY0LzAvMjc0MzY5MTc0Njk2L3NwZl" \
            "9BY3Rpb25OYW1lL3NwZl9BY3Rpb25MaXN0ZW5lci9zcGZfc3RydXRzQWN0aW9uL" \
            "yEyZlFEU2VhcmNoLmRv/"

def start_requests(self):

    settings = get_project_settings()
    ids = ['15740175']
    for i, id in enumerate(ids):
        yield FormRequest(
            url=self._FORM_URL,
            formdata={
                'polygonId': id,
                'enquiryType': 'lrInspireId',
            },
            headers={
                'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:43.0) Gecko/20100101 Firefox/43.0",
                'Accept-Language': 'en-GB,en;q=0.5', '
                'Referer': ''
            }
        )

def parse(self, response):
    # do parsing here

但在日志中我只看到 403 响应。 (注意,网站的 robots.txt 并不禁止抓取。)

我使用 Charles 检查 Scrapy 发送的请求,所有请求标头(包括 User-Agent)看起来与我在 Firefox 中发出请求并返回 200 时发送的请求标头相同。

大概网站知道我是爬虫并阻止了我,但它怎么知道?我真的很迷惑。我只发送一个响应,所以它与速率限制或下载延迟无关。

【问题讨论】:

    标签: web-scraping scrapy


    【解决方案1】:

    本网站可能受到CSRF(跨站点请求伪造)的保护。此外,动作 URL 看起来像有一个session token,它可以防止重放攻击。然而,抓取可能是非法的,在以这种方式访问​​本网站之前,请咨询本网站/组织的所有者

    【讨论】:

      【解决方案2】:

      只需在浏览器中打开页面源 HTML 并刷新几次 - 您会看到表单操作 URL 每次都在变化,因此当您尝试将其用作硬编码时,它是动态 URL。您应该先获取带有表单的 HTML 页面,然后使用当前表单操作 URL 发送表单数据。

      【讨论】:

        猜你喜欢
        • 2012-09-24
        • 2012-11-07
        • 1970-01-01
        • 1970-01-01
        • 2021-12-08
        • 1970-01-01
        • 1970-01-01
        • 2023-02-05
        • 1970-01-01
        相关资源
        最近更新 更多