赞
踩
urllib是python中的URL处理模块,Python内置的库,不需要我们安装。urllib是一个包,它收集了4个用于处理url的模块:
①urllib.request :请求打开和读取url模块
②urllib.error :异常处理模块(包含由urllib.request造成的异常)
③urllib.parse :解析模块(拆分、合并等)
④urllib.robotparser:robot.txt解析模块
urllib.request 模块定义了打开和获取网页信息的函数和类(基本和简要的身份验证、重定向、cookie等等)
形式如下:
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
其中,url是你申请打开的网址,它可以是字符串也可以是请求对象。
data是
urllib.request.urlopen() 方法经常会被用来打开一个网页的源代码,然后会去分析这个页面源代码,但是对于有的网站使用这种方法时会抛出"HTTP Error "异常,如下所示:
// 源代码:
from urllib import request
url='https://movie.douban.com/'
#url='http://www.baidu.com'
html=request.urlopen(url).read().decode('utf-8')
print(str(html))
爬取豆瓣电影网页,会出现如下所示的错误:
我还以为是我的代码出现了问题,然后换了一个百度网页,就可以运行了。
// An highlighted block
from urllib import request
#url='https://movie.douban.com/'
url='http://www.baidu.com'
html=request.urlopen(url).read().decode('utf-8')
print(str(html))
可以看到抓取的网页源代码如下:
是因为用 urllib.request.urlopen 方式打开一个URL,服务器端只会收到一个单纯的访问该页面的请求,并不知道发送这个请求使用的浏览器,操作系统,硬件平台等信息,而缺失这些信息的请求往往都是非正常的访问,例如爬虫.所以是因为豆瓣电影主页设置了反爬虫机制,直接爬取会被拦截。
因此为了防止爬虫访问该网站,豆瓣设置了反爬虫机制,验证请求信息中的user-agent(它的信息包括硬件平台、系统软件、应用软件和用户个人偏好),如果user-agent存在异常或者是不存在,那么这次请求将会被拒绝,所以可以尝试在请求中加入user-agent的头部信息,获取user-agent的操作如下:
因此需要在豆瓣电影主页的网站,按f12,进入其网页代码,如下图中红色部分所示:
然后再选中network,选中name中的任意一个,点击Headers,往下拉找到其中user-agent(代表用的哪个请求的浏览器),如图:
此时将代码添加headers属性:
代码如下:
// 解决反扒取问题
from urllib import request
url='https://movie.douban.com/'
headers={'user-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3765.400 QQBrowser/10.6.4153.400'}
html=request.Request(url,headers=headers)
html1=request.urlopen(html)
ydm=html1.read().decode('utf-8')
print(str(ydm))
可以看到输出内容为豆瓣的源代码:
参考链接:https://blog.csdn.net/eric_sunah/article/details/11301873
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。