公司可以限制可以从其网站上删除的内容吗?

时间:2018-05-28 11:32:39

标签: python-3.x web-scraping python-requests

我在Python3上使用Requests和Beautiful Soup学习网页抓取。

我试图从不同的网站提取信息,我没有遇到任何问题。

但是,我访问了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中的元素检查器,我可以获得有关标题,作者,格式等的信息,但这些信息没有存储在我的变量中。

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

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

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

1 个答案:

答案 0 :(得分:0)

在这种情况下,网站需要User-Agent headerrequests中的默认行为不会发送此标头,请检查this post。以下将User-Agent标头的值设置为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)

请注意,某些网站会自动拒绝没有User-Agent标头的请求或包含可能来自bot的用户代理值的请求,例如curlwget。检查this guide有关防止网页抓取的问题,这有助于理解网站针对机器人使用的一些技术