仅在AWS实例上使用Python进行抓取被阻止-请求被阻止

仅在AWS实例上使用Python进行抓取被阻止-请求被阻止,python,web-scraping,python-requests,postman,Python,Web Scraping,Python Requests,Postman,我已经构建了一个脚本来刮去杂货店结果页面,示例链接: 不幸的是,我的Python脚本被服务器阻塞(常规get请求)。我甚至尝试在我的机器上使用CURL进行故障排除: curl htpps://www.tesco.com 但我得到以下回应: <HTML><HEAD> <TITLE>Access Denied</TITLE> </HEAD><BODY> <H1>Access Denied</H1>

我已经构建了一个脚本来刮去杂货店结果页面,示例链接:

不幸的是,我的Python脚本被服务器阻塞(常规get请求)。我甚至尝试在我的机器上使用CURL进行故障排除:

curl htpps://www.tesco.com
但我得到以下回应:

<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>
 
You don't have permission to access "http&#58;&#47;&#47;dce&#45;homepage&#46;tesco&#46;com&#47;" on this server.<P>
Reference&#32;&#35;18&#46;496cd417&#46;1592645071&#46;44e961c
</BODY>
</HTML>
robots.txt
不禁止刮削:


Sitemap: https://www.tesco.com/UK.sitemap.xml
 
User-agent: *
Disallow: *reviews/submission/*
Disallow: *&sortBy*
Disallow: *promotion=*
Disallow: *currentModal*
Disallow: *active-tab*
Disallow: *include-children*
Disallow: *new&new*
Disallow: /groceries/*reviews/submission

编辑

我已将无头chrome webbrowser下载到AWS上的ubuntu服务器实例中,并尝试拍摄tesco.com的屏幕截图。我得到以下错误:

为了澄清,我尝试浏览https地址——这不重要,因为我确信它有https重定向。

AWS以json格式发布它们的地址。可以将其导入web服务器,以停止网站刮取。我希望像特易购这样的大型连锁超市能够实现这一点

要尝试的一件事是将AWS区域更改为最新的区域,例如欧洲(巴黎)eu-west-3。他们的IP范围很可能已经过时

还有一种可能性是,拥有相同共享IP范围的AWS lambada的人在短时间内提交了许多请求,并被自动阻止


要解决此问题,您可以连接到VPN,这将隐藏您的AWS IP地址。此外,您还可以创建一个连接到本地计算机的连接(并因此使用本地PC IP地址)。

看起来Tesco.com正在阻止AWS IP地址。我使用了付费代理,目前效果良好。感谢@Dan Dev在检查AWS实例时提供的帮助。

我对CSRF令牌有怀疑,但我在repl.it窗口和Digital Ocean实例上都得到了200条回复,其中包含您的代码。我的另一个怀疑是利率限制。尝试实施指数退避?我不会以很高的速率向特易购发送请求。目前,我每天运行脚本几次。我将尝试在AWS install Postman上启动一个Windows实例,然后重试-这可能会告诉我是否所有AWS IP都被tesco.co阻止,或者可能只有Linux实例?@shaunakde版本不匹配是什么意思?我目前使用的是Python 3.8.2I,我可以运行
curl'https://www.tesco.com/groceries/en-GB/search?query=kitkat“-H”用户代理:Mozilla/5.0(X11;Ubuntu;Linux x86_64;rv:77.0)Gecko/20100101 Firefox/77.0”
从我的本地机器上运行,它可以工作,但从AWS实例上运行它不起作用。我猜AWS IP被阻止了,我也希望普通代理被阻止了,一些用户代理也被阻止了,例如curl。@Dan Dev谢谢!我希望其他人会启动AWS实例并进行检查。现在我确信这不仅仅是我:)我将研究一些付费代理。有人知道便宜的吗?我的项目不是商业性的,所以我不想为公文包应用花费太多。谢谢!我正在检查AWS Windows server是否会被阻止。我确实尝试过使用代理进行抓取-是的,是免费的,不幸的是,我仍然被阻止。我想我可以试试VPN。只是为了测试的目的,你可以创建一个基本的python lambda并尝试不同的区域。同样,这也没什么区别,但在你的标题中,你只需要裁判和用户代理(并将用户代理设置为Chrome)。设置主机有时会导致问题。好的,我刚刚在AWS的Windows实例上尝试了
curl www.tesco.com
,没有回复。但是使用IE可以让我浏览他们的网站。嗯,有什么想法吗?我使用了额外的头选项来模拟邮递员请求,因为这些请求很好。我刚刚在我的linux实例上尝试了wget-同样的任务:
wgethttps://www.tesco.com
--2020-06-20 13:49:56--https://www.tesco.com/ 解析www.tesco.com(www.tesco.com)。。。23.218.140.69连接到www.tesco.com(www.tesco.com)| 23.218.140.69 |:443。。。有联系的。HTTP请求已发送,正在等待响应…

import requests
headers = {'User-Agent': 'PostmanRuntime/7.25.0',
'Accept': '*/*',
'Cache-Control': 'no-cache',
'Host': 'www.tesco.com',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Cookie': 'bm_sz=04919BE521C5C4D8ADF4617D5250A484~YAAQrpxkX+b8IYVyAQAA/VQr0QgTg5gDEXUmuUfa0qqtHv0QHHZjtL4gcSJ9RA7hoaEXJOTp1DYPb9xCrGwP37BrvtUY2kCKB7PqvVLXAXnfrt9F0ZiEPj10SiSVXZRZj8klW46ZA7Ho/0XtWlsO2aFX1MPkmD2/C10cDH6E1PgeO9EUNkZi9uPu109p4DE=; _abck=5621BD87FE69A39458BD0AB267BB9A81~-1~YAAQrpxkX+f8IYVyAQAA/VQr0QTSvxcBlxnRsND9THtPksH0EbfK/A3XkW0xT9oCk0Bj1ewbVDXr3PqtBjR7hHO6h6IXMvC2XID5RrAk0gVEKGwm9RDyBWyvp6hnPzicHMH6tTUIZdYLmssjIBAJ2WnpBkKUuF0YbX45V4H8d3m6u8FOhyqZewFyT1+Yvh14NDHwmDw4Yb4hQkLPglrkzt8LV39SpfSjjGkWMjyX4l967aCe+SHK5hjcTIz9bjSAoOQNqFWR5ATMnfBDSLOfaAQ4Dic=~-1~-1~-1; atrc=48693e75-78d9-4fce-85d0-9a0a50232644; _csrf=2wH2UKiamS-tjvd4hERekcG2',
'Referer': 'http://www.tesco.com/'

}

url = 'https://www.tesco.com/groceries/en-GB/search?query=kitkat'
results = requests.get(url, headers = headers)

print(results.status_code)


Sitemap: https://www.tesco.com/UK.sitemap.xml
 
User-agent: *
Disallow: *reviews/submission/*
Disallow: *&sortBy*
Disallow: *promotion=*
Disallow: *currentModal*
Disallow: *active-tab*
Disallow: *include-children*
Disallow: *new&new*
Disallow: /groceries/*reviews/submission