python学习中爬取网站视频时由于python本身不能地址限制的原因,不能直接用response = requests.get(url)获取到网页源代码,进而无法爬取网站信息。
我以猫眼网为例:
访问猫眼代码如下:
import requests
from requests.exceptions import RequestException
def get_one_page(url):
response = requests.get(url)
try:
if response.status_code == 200:
return response.text
return None
except RequestException:
return None
def main():
url = 'http://maoyan.com/board/4'
html = get_one_page(url)
print(html)
if __name__ == '__main__':
main()
控制台会出现这样的代码,如果把它写在html里,就是一个禁止访问的页面:
<body>
<header>
<h3><span class="icon">⛔️</span>很抱歉,您的访问被禁止了</h3>
</header>
<main>
<p>? 如何恢复?</p>
<ol>
<li>
• 您可以尝试切换网络环境,例如:关闭 Wi-Fi、关闭 VPN 等网络代理再尝试访问
</li>
<li>
• 如果您认为当前网络的封禁是误报,请提交您的联系方式,以便我们核实
<form method="POST" action="?__oceanus_forbidden=1">
<input type="text" name="contact" required placeholder="请输入手机号或者邮箱地址" />
<button class="row" type="submit">提交</button>
</form>
</li>
</ol>
</main>
<footer>
<a href="https://maoyan.com">猫眼电影</a>
<a href="mailto:[email protected]">邮件反馈</a>
</footer>
</body>
解决方法:是这种访问一般都是代码后台访问网站,现在稍微有点反扒意识的网站,都不能正常爬取到,这个时候返回的状态码也不是200,所以我们给他加入头部信息,可以直接在网页上审查元素,点network,再点doc,查看他的**(user-agent)用户代理就行的,这就是个访问浏览器的方式,当我们不用这个头部信息的时候,有些网站就认为我们不是从浏览器访问的,就不给你爬取,所以我们加上这个头部信息就行了,但是有些网站的反扒措施比较好,就像知乎**,就算把所有的头部信息都加在里面,甚至是登录后的cookies,也不能拿到首页的源代码,必须模拟登录,现在介绍这个是最简单的,就是加个用户代理**"Mizilla/5.0**"就行了。
import requests
from requests.exceptions import RequestException
def get_one_page(url):
headers = {"user-agent": "Mizilla/5.0"}
response = requests.get(url, headers=headers)
try:
if response.status_code == 200:
return response.text
return None
except RequestException:
return Noneain():
url = 'http://maoyan.com/board/4'
html = get_one_page(url)
print(html)
if __name__ == '__main__':
main()
现在便可以正常访问一些普通的网站。