菜鸟教程
urllib库用于操作网页URL,并对网页的内容进行抓取和处理
request模块
import urllib.request
打开URL
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
- url,网页地址
- data,发送到服务器的其他数据对象,默认为none
- timeout,设置访问超时时间
- cafile、capath,前者为CA证书,后者为CA证书的路径,使用HTTPS需要用到
- casefault,已被弃用
- context,ssl.SSLContext类型,用来指定SSL设置
网页内容读取
read()
,读取整个网页内容,可以指定读取长度
readline()
,读取文件的一行内容
readlines()
,读取文件的全部内容,把读取的内容赋值给一个列表变量
from urllib.request import urlopen
url = urlopen("http://c.biancheng.net/view/2397.html")
print(url.read(100))
print(url.readline())
lines = url.readlines()
for line in lines:
print(line)
网页状态码
getcode()
,获取网页状态码
网页保存本地
from urllib.request import urlopen
myURL = urlopen("https://www.runoob.com/")
f = open("runoob_urllib_test.html", "wb")
content = myURL.read() # 读取网页内容
f.write(content)
f.close()
本地生成runoob_urllib_test.htm文件,包含网页所有内容
file处理,https://www.runoob.com/python3/python3-file-methods.html
编码解码
quote()
,编码
unquote()
,解码
import urllib.request
encode_url = urllib.request.quote("https://www.runoob.com/") # 编码
print(encode_url)
unencode_url = urllib.request.unquote(encode_url) # 解码
print(unencode_url)
字符串编码顺序:gbk、unicode、utf16、url解码
字符串解码顺序:url解码、utf16、unicode、gbk
error模块
包含urllib.request抛出的异常
parse模块
解析URL
robotparser模块
解析robots.txt文件
确认网页基本信息
标头
1、F12进入开发人员工具
2、选择网络
3、在筛选器中输入需要查看的内容名称
常规
确认请求方法、请求URL,请求URL不一定是浏览器上方显示地址
负载
请求负载是要发送到指定url的对象
相关问题解决
ValueError: Invalid header name b’ Accept-Encoding
以上情况,目前还不完全确定是因为缩进导致的,但确实去除缩进后就没这个报错
strip()只是去除字符串头尾的指定字符,关于中间的内容是不处理的
405 Not Allowed
表示请求不被服务器允许
1、请求方法是否正确,可在开发人员工具中的标头确认
2、请求URL是否正确,同第一点
3、权限限制,网页限制访问,需提供有效凭据或身份验证信息
JSON parse error: Unrecognized token
"msg" : "JSON parse error: Unrecognized token \'meetingBookingTimeStatus\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token \'meetingBookingTimeStatus\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\')\\n at [Source: (PushbackInputStream); line: 1, column: 26]",\n "code" : 10000,\n "data" : null\n}'
请求头中规定了Content-Type: application/json,所以应该传入JSON数据,将data修改为json