【问题标题】:Python Requests 403 on Linux but works from WindowsPython 在 Linux 上请求 403,但在 Windows 上工作
【发布时间】:2017-08-05 19:00:05
【问题描述】:

我目前遇到了一个奇怪的网络抓取问题,由于某种原因,相同的代码可以在我的 PC(状态代码:200)上运行,但不能在运行完全相同的 python 版本的 Ubuntu 16.04 服务器(状态代码:403)上运行。

import requests
session = requests.Session()
response = session.get('https://zooqle.com/', headers={'User-Agent': 'Mozilla/5.0'})
print(response.status_code)

你知道为什么会这样吗?

【问题讨论】:

  • 尝试将用户代理标头设置为一些典型的浏览器。
  • 通过网络抓取,您很有可能会因为使用过多的带宽而被禁止。

标签: python linux web-scraping python-requests


【解决方案1】:

答案可能是防火墙出站规则,它阻止了你,我已经在我的 Ubuntu 16.04 上使用 Python 2.7.13 测试了你的代码,并收到了 200 状态。

检查您的入站和出站规则:

sudo iptables -L -n

我的 iptable 是这样的:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-ISOLATION  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:68

Chain DOCKER (1 references)
target     prot opt source               destination         

Chain DOCKER-ISOLATION (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0    

我刚刚在此处发布,供您与您的比较并更正您的 Linux 防火墙,重点关注 ACCEPT/REJECT 请求。

【讨论】:

  • 一切似乎都很好,我唯一的猜测是它被 VPS 提供商阻止了。
  • 这也是可能的。
  • 我使用 selenium web-driver 尝试了同样的事情,结果导致以下页面要求验证码,当通过任何浏览器从 Windows 访问时,该验证码未显示。 prntscr.com/g5gr1a我会尝试启用cookie并相应报告
  • 仍然没有运气,VPS 提供商确认他们允许所有流量,我最终的猜测是我的 IP/位置被列入 cloud-flare 或网站本身的黑名单,因此每次访问时都要求我提供验证码它(据我所知无法绕过)
【解决方案2】:

结论:网站已被 ISP 屏蔽。

解决方案:使用网络代理并对其进行网络抓取以获取所需的数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 2014-11-09
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多