Python 3.x 公司能否限制从其网站上刮取的内容?

Python 3.x 公司能否限制从其网站上刮取的内容?,python-3.x,web-scraping,python-requests,Python 3.x,Web Scraping,Python Requests,我正在学习使用请求和Python3的靓汤进行网络抓取 我试着从不同的网站上提取信息,没有问题 但是,我访问了packtpub.com站点(),当使用requests发送请求以将整个站点的内容保存在一个变量中时,我收到了以下消息: import requests url = 'https://www.packtpub.com/' req = requests.get(url) req.raise_for_status() reqText = req.text print(reqText) "re

我正在学习使用请求和Python3的靓汤进行网络抓取

我试着从不同的网站上提取信息,没有问题

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

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发送了一个请求。

在本例中,我没有得到异常,但我注意到变量中包含的内容并不是全部。我的意思是,使用Mozilla Firefox中的元素检查器,我可以获得有关标题、作者、格式等的信息,但这些信息并没有存储在我的变量中

我认为从任何网站的公共内容中提取信息都是可能的

我的问题是:公司能否限制从其网站上刮取的内容?是否总是允许废弃网站的公共内容,或者有一些法律问题需要考虑


元素检查器让我知道了全部内容,但请求库无法访问所有内容,这让我感到惊讶。

在这种情况下,网站需要。
请求
中的默认行为不发送此标头,请检查。以下命令将用户代理标头的值设置为
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)

请注意,有些网站会自动拒绝没有用户代理标头的请求或包含用户代理值的请求,例如可能来自bot的
curl
wget
。查看有关防止网页垃圾的信息,这有助于了解网站针对bot使用的一些技术

很高兴知道,通过浏览器下载的所有内容都可以通过“bot”下载。然而,这可能很困难,一些网站有很多标题信息/检查以显示正确的数据。这使得您很难使用正在使用的技术。简而言之:不可能限制用户可以下载的内容。为数据创建有效的“假”请求可能非常困难