在没有 cookie 或 javascript 的情况下抓取适用于 Firefox 的 URL 时出现 403 错误

问题描述 投票:0回答:2

我有一个在 Firefox 上运行的 URL 设置为阻止所有 cookie 并关闭了 JavaScript,但是当我用

urllib
在 Python 上抓取它时,我得到
HTTP Error 403: Forbidden
。我使用与 Firefox 相同的用户代理,这是我的代码:

import urllib
import urllib.request

USER_AGENT_KEY = "User-Agent"
USER_AGENT_VALUE = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/111.0'

def get_page(url)
    req = urllib.request.Request(url)
    req.add_header(USER_AGENT_KEY, USER_AGENT_VALUE)

    # Empty SSL context, only for public websites, don't use this for banks or anything with a sign-in!
    response = urllib.request.urlopen(req, context = ssl.SSLContext(), timeout = TIMEOUT)

    data = response.read()
    html = data.decode('utf-8') 

    return html  # Returns "HTTP Error 403: Forbidden"

除了 JavaScript、cookies 或用户代理之外,我不知道网站有什么机制来检测用户。如果相关,一个 URL 是

https://www.idealista.pt/comprar-casas/alcobaca/alcobaca-e-vestiaria/com-preco-max_260000,apenas-apartamentos,duplex/
.

这个网站如何检测到刮板?

javascript python web-scraping cookies user-agent
2个回答
0
投票

提供的网址是一个动态网站,似乎使用了 React 或其他类似的 JS 框架。如果没有 javascript,该站点将无法运行。当您使用

curl
下载页面时,您会看到您必须启用 javascript。 这意味着,您不会仅通过下载 html 页面获得任何有用的信息。

你得到 403 的原因是该页面嵌入了一个从 https://geo.captcha-delivery.com/ 返回 403 的脚本。我不能说这个脚本是关于什么的,但它似乎是一些一种地理封锁 api,由于缺少一些信息而阻止您的请求。


0
投票

使用 urllib / requests 进行网络抓取是不可靠的。即使您能够在不被检测到的情况下加载页面,某些网站也会在之后使用 JavaScript 加载数据。解决这个问题的一个好方法是使用 Selenium WebDriverPlaywright。这两种工具都允许您模拟网络浏览器并与页面交互,就好像您是真实用户一样。

© www.soinside.com 2019 - 2024. All rights reserved.