scrapy 我的脚本无法爬网该网站(http:403),但无法爬网我的浏览器

jxct1oxe  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(158)

我正在爬一个网站时,他们用403阻止了我。我仍然可以从我的任何浏览器访问该网站,但我的Scrapy脚本无法爬取。
我从家里爬用5个代理,每个有10个IP随机选择。我有大约40个用户代理随机选择(请参阅下面的代码)。在每个请求上选择一组新的代理和user_agent。每个yield请求大约有1 MB重。当收集到大约100个请求时,脚本(使用Github的S3 pipelines)发送一个包到我在AWS上的S3。我有一个下载延迟10和自动节流阀激活在我的Scrapy项目的设置。所有这一切都是与网站robots.txt请求一致的-爬行延迟10。
我阅读了Scrapy、Python和其他一些工具的说明手册,但找不到任何方法来让爬行变得更“人性化”。
我的设置(提取):
第一个问题:

j0pj023g

j0pj023g1#

我使用了Freddy的设置,并进行了小修改,并根据@Agus-Mathew的建议减少了“CONCURRENT_REQUESTS_PER_IP”。
所以,〉我的〈最终设置是:

DOWNLOAD_DELAY = 10
CONCURRENT_REQUESTS = 1
...

# PROXYMESH_TIMEOUT = 60

# CONCURRENT_REQUESTS_PER_IP = 16

# Disable cookies (enabled by default)

# COOKIES_ENABLED = False

...
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 5
AUTOTHROTTLE_MAX_DELAY = 60
AUTOTHROTTLE_TARGET_CONCURRENCY = 4.0

# AUTOTHROTTLE_DEBUG = False

我配置了我的Scrapy头如下,因为我只收到了我的Scrapy脚本块-而不是我的网页浏览器(如Freddy).旋转代理我没有使用的工作.

DEFAULT_REQUEST_HEADERS = {
   'accept-encoding': 'gzip, deflate, br',
   'accept-language': 'en-US,en;q=0.9',
   'sec-ch-ua': '"Chromium";v="106", "Microsoft Edge";v="106", ";Not A Brand";v="99"',
   'sec-ch-ua-mobile': '?0',
   'sec-ch-ua-platform': '"Windows"',
}

当然,这取决于我们要抓取的网站,如果他们的API设置对请求过于敏感,那么我们必须做出相应的调整。
顺便说一句:我经常读到关于在蜘蛛中使用“time.seep()”(或者个人不使用,因为Twisted Reactor和Scrapy并发)。但是在我的例子中,time.sleep对避免错误没有任何作用。所以它对我没有帮助。

相关问题