这里写自定义目录标题
- urllib简介
urllib简介
好文链接 https://www.jianshu.com/p/63dad93d7000
urllib 是一个收集了多个涉及 URL 的模块的包:
urllib.request 打开和读取 URL
urllib.error 包含 urllib.request 抛出的异常
urllib.parse 用于解析 URL
urllib.robotparser 用于解析 robots.txt 文件
我们首先了解一下 Urllib 库,它是 Python 内置的 HTTP 请求库,也就是说我们不需要额外安装即可使用,它包含四个模块:
1.第一个模块 request,它是最基本的 HTTP 请求模块,我们可以用它来模拟发送一请求,就像在浏览器里输入网址然后敲击回车一样,只需要给库方法传入 URL 还有额外的参数,就可以模拟实现这个过程了。
2.第二个 error 模块即异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作保证程序不会意外终止。
3.第三个 parse 模块是一个工具模块,提供了许多 URL 处理方法,比如拆分、解析、合并等等的方法。
4.第四个模块是 robotparser,主要是用来识别网站的 robots.txt 文件,然后判断哪些网站可以爬,哪些网站不可以爬的,其实用的比较少。
在这里重点对前三个模块进行下讲解。
1.urlopen()
直接保存,打印时,会返回一个对象
2.post请求时需要传参(向服务器发起请求)
post请求发送数据时,必须按照post请求的格式来封装数据。也就是。,后面的response必须再跟一个data参数。
3.请求时超时怎么办(异常处理)
https://www.runoob.com/python/python-exceptions.html
4.响应头的问题
418报错(对方已经发现你是一个爬虫,htcpcp1.0协议中的418的意义是:当客户端给一个茶壶发送泡咖啡的请求时,茶壶就返回一个418错误状态码,表示“我是一个茶壶”。)
5.获取响应信息
得到所有的headers()
得到某个header的参数
6.解决刚才418的报错,不让对方服务器发现我是个爬虫,而是真的浏览器
# url="http://httpbin.org/post"
# headers = {
# "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"
# } #伪装成服务器
# data=bytes(urllib.parse.urlencode({'name':'aryayang'}),encoding="utf-8")
# req=urllib.request.Request(url=url,data=data,headers=headers,method="POST")
# response=urllib.request.urlopen(req)
# print(response.read().decode("utf-8"))
1.
2.解决刚才的豆瓣不可访问问题
url="https://www.douban.com"
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36" #这里可以添加更多的信息,伪装的更像 用F12得到
}
req=urllib.request.Request(url=url,headers=headers)
response=urllib.request.urlopen(req)
print(response.read().decode("utf-8"))