Python 请求与 robots.txt

标签 python beautifulsoup python-requests robots.txt

我有一个供个人使用的脚本,可以抓取一些网站以获取信息,直到最近它工作得很好,但其中一个网站似乎增强了其安全性,我无法再访问其内容。

我使用带有请求的Python和BeautifulSoup来抓取数据,但是当我尝试使用请求获取网站的内容时,我遇到了以下情况:

'<html><head><META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"></head><iframe src="/_Incapsula_Resource?CWUDNSAI=9_4E402615&incident_id=133000790078576866-343390778581910775&edet=12&cinfo=4bb304cac75381e904000000" frameborder=0 width="100%" height="100%" marginheight="0px" marginwidth="0px">Request unsuccessful. Incapsula incident ID: 133000790078576866-343390778581910775</iframe></html>'

我做了一些研究,看起来这就是阻止我的原因:http://www.robotstxt.org/meta.html

有什么办法可以让网站相信我不是恶意机器人吗?这是一个我每天在单个源上运行约 1 次的脚本,因此无论如何我都不会成为他们服务器的负担。只是有人有脚本让事情变得更容易:)

编辑:尝试切换到机械化并以这种方式忽略robots.txt,但我没有收到 403 Forbidden 响应。我想他们已经改变了对抓取的立场,并且还没有更新他们的服务条款。是时候采取 B 计划了,不再使用该网站,除非有人有其他想法。

最佳答案

最有可能发生的情况是服务器正在检查用户代理并拒绝访问机器人使用的默认用户代理

例如requestsuser-agent设置为python-requests/2.9.1

您可以自己指定 header 。

url = "https://google.com"
UAS = ("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1", 
       "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0",
       "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0",
       "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
       "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36",
       "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
       )

ua = UAS[random.randrange(len(UAS))]

headers = {'user-agent': ua}
r = requests.get(url, headers=headers)

关于Python 请求与 robots.txt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19891446/

相关文章:

python - 如何获取 BeautifulSoup 中子元素的 HTML 表示形式?

python - 为什么 vars(response) 不显示response.text? (使用Python请求模块)

python - 将简单列表转换为字典(在 python 中)

python - 使用队列转码视频

python - Shell 脚本主要文本

python - 使用 BeautifulSoup 获取没有标签的文本?

python - 如何从字符串中删除垂直线

python - 在 python 中从响应中解压 msgpack

python-2.7 - 如何提取与模式匹配的 URL

请求后 : 'Connection aborted, timeout(' The write operation timed out') 的 Python 错误