栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

python request.get总是得到404

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python request.get总是得到404

Web服务器是黑匣子。允许他们根据您的请求,一天中的时间,月相或他们选择的任何其他条件返回任何有效的HTTP响应。如果另一个HTTP客户端始终收到不同的响应,请尝试找出Python发送的请求与另一个客户端发送的请求之间的区别。

这意味着您需要:

  • 记录工作要求的各个方面
  • 记录失败请求的所有方面
  • 尝试进行哪些更改以使失败的请求更像工作请求,并最小化这些更改。

我通常将请求指向http://httpbin.org端点,让它记录该请求,然后进行实验。

对于

requests
,有几个标头是自动设置的,而您通常不希望更改其中的许多标头:

  • Host
    ; 这个 必须 设置为你联系的主机名,这样它才能正常多主机不同的网站。
    requests
    设置这个。
  • Content-Length
    Content-Type
    ,对于POST请求,通常是通过传递给的参数设置的
    requests
    。如果这些不匹配,请更改传入的参数
    requests
    (但要注意
    multipart/*
    请求,该请求使用记录在
    Content-Type
    标头中的生成边界;将生成的边界保留为
    requests
    )。
  • Connection
    :将其交给客户管理
  • cookies
    :这些通常是在初始GET请求中设置的,或者是在首次登录网站后设置的。确保使用
    requests.Session()
    对象捕获cookie并登录(提供的凭据与浏览器相同)。

其他所有事情都是公平的游戏,但是如果

requests
设置了默认值,那么这些默认值通常不是问题。就是说,我通常从User-
Agent标头开始,然后从那里开始。

在这种情况下,该网站正在对用户代理进行过滤,看起来他们已被列入黑名单

Python
,将其设置为 几乎任何其他可用值

>>> requests.get('https://rent.591.com.tw', headers={'User-Agent': 'Custom'})<Response [200]>

接下来,你需要考虑到

requests
不是浏览器
requests
仅仅是HTTP客户端,浏览器的功能更多。浏览器会解析HTML以获取其他资源,例如图像,字体,样式和脚本,也加载这些其他资源,并执行脚本。然后,脚本可以更改浏览器显示的内容并加载其他资源。如果
requests
结果与您在浏览器中看到的结果不匹配,但与
浏览器发出初始请求匹配
,则您需要确定浏览器已加载了哪些其他资源,并
requests
根据需要进行其他请求。如果所有其他方法均失败,请使用像这样的项目
requests-html
,该项目可让您通过实际的无头Chromium浏览器运行URL。

您尝试联系的站点向发出了一个额外的AJAX请求

https://rent.591.com.tw/home/search/rsList?is_new_list=1&type=1&kind=0&searchtype=1&region=1
,如果您试图从该站点抓取数据,请考虑到这一点。

接下来,构建良好的网站将使用安全最佳实践,例如CSRF令牌,这要求您以正确的顺序发出请求(例如,在POST到处理程序之前先获取GET请求以检索表单),然后处理cookie或以其他方式提取服务器希望从一个请求传递到另一个请求的额外信息。

最后但并非最不重要的一点是,如果站点阻止脚本发出请求,则它们可能试图强制执行禁止抓取的服务条款,或者因为它们具有API而希望您使用。请检查其中一个,并考虑到如果您仍然继续抓取该站点,可能会更有效地阻止您。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646662.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号