公司可以限制可以从其网站抓取的内容吗?



我正在学习使用Python3的请求和美丽汤进行网页抓取。

我试图从不同的网站中提取信息,我没有问题。

但是,我访问了 packtpub.com 站点 (https://www.packtpub.com/(,当使用请求发送请求以将整个站点的内容保存在变量中时,我收到以下消息:

import requests
url = 'https://www.packtpub.com/'
req = requests.get(url)
req.raise_for_status()
reqText = req.text
print(reqText)
"requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://www.packtpub.com/" 

后来,我搜索了所有Python的书籍,并使用结果第一页的URL发送了一个请求。 https://search.packtpub.com/?query=python&refinementList%5Breleased%5D%5B0%5D=Available

在这种情况下,我没有收到异常,但我注意到变量中的内容保留并不是全部。我的意思是,使用像Mozilla Firefox中的元素检查器,我可以获取有关标题,作者,格式等的信息,但这些信息没有存储在我的变量中。

我认为可以从任何网站的公共内容中提取信息。

我的问题是:公司可以限制可以从他们的网站上抓取的内容吗?是否总是允许废弃网站的公开内容,或者需要考虑一些法律问题?

令我惊讶的是,元素检查器让我知道了整个内容,但请求库无法访问所有内容。

在这种情况下,网站需要用户代理标头。requests中的默认行为不会发送此标头,请查看此帖子。下面将用户代理标头的值设置为Mozilla

import requests
url = 'https://www.packtpub.com/'
req = requests.get(url, headers= {"User-Agent": "Mozilla"})
req.raise_for_status()
reqText = req.text
print(reqText)

请注意,某些网站会自动拒绝没有用户代理标头的请求或包含用户代理值的请求,例如可能来自机器人的curlwget。查看本指南,了解防止网络抓取,这有助于了解网站针对机器人使用的一些技术

最新更新