字符串分两类:
字符集:
字符集是多个字符的集合
字符集包含了所有需要表示字符.
ASCII是最早使用最多的字符集, 编码用1个字节表示. 但是表示的字符太少, 只对英文的的表示有良好支持.
于是其他字符集应需而生.
Unicode可以用来表示所有语言字符, 编码用2个字节表示. 所以占用空间较大.
而UTF-8编码, 是Unicode字符集的一种实现方式, 这种实现方式好处在于, 能用1个字节表示的, 就用1个字节表示, 1个字节解决不了才用2个字节表示.
相对于原本的Unicode解决办法来说, 更节省空间. 所以现在多使用于UTF-8
Python中
encode可以将字符串编码为bytes二进制.
decode可以将字符串解码为 utf8.
其中 str.decode() 默认为utf-8
str.decode()
str.decode("utf-8")
str.decode("utf8")
str.decode("UTF-8")
这几种表达方式没有区别, 不区分大小写, 有无-都可. 甚至如果是utf-8编码的方式,可以省略
http:
超文本传输协议
默认端口80
https:
http + ssl (安全套接层:公私钥加解密)
默认端口443
更安全, 性能更低
scheme: (方案)协议. 通讯使用的协议: http/https/ftp
anthor: 锚点. 一般用#号表示. 当请求网址锚点的时候, 直接跳转网址位置到指定锚点. (带锚点与否的请求, 响应内容是相同的. 不过显示位置不同.)
引擎爬虫url的起始点
首先需要去代理网找能够使用的免费或者付费ip
在发送request请求的时候, 设置proxies值.并且设置http,https键, 值为所使用代理ip和端口
格式:
import requests
proxies = {
"http":"http://163.113.101.23:80",
"https":"https://163.113.101.23:80",
}
res = request.get("http://www.baidu.com",proxies=proxies)
准备相当多供使用的代理IP,随机选择一个使用
IP池选择:
字典形式{‘ip‘:‘ip‘,‘times‘:0} # 每次使用之后,使用次数+1
列表形式[{‘ip‘:ip},{‘ip2‘:ip2},] # 按照使用次数排序sort
从使用次数较少的N个ip中, 随机选择一个ip
检查可用性
使用requests添加超时参数, 判读ip地址的质量
使用在线ip质量检测网站
在请求页面的时候, 能不使用cookie就不使用cookie.
如果需要使用cookie的时候, 要判断. 单一cookie会不会影响访问.
如果不影响. 则可以通过携带之前cookie来访问.
# 实例化一个session对象.
session = requests.session()
data = {
‘帐号‘:‘zhanghao‘,
‘密码‘:‘密码‘
}
# 先获得登录之后的cookie
session.post(url,data)
# 即可访问登录之后的地址
response = session.get(url,headers)
单一会话如果可以长期使用的时候, 也可以直接免去session.post登录帐号密码这个步骤, 直接在data里面添加已经登录过的cookie值. 同样可以进行访问
如果影响, 则需要准备大量cookie(帐号密码)进行访问
在访问某些网站的时候, 没有ssl证书. 则浏览器拦截.
如果用爬虫访问该网站的时候, 会直接报错
这个时候请求的时候需要将ssl证书验证关掉.对应参数verify
requests.get(‘http://www.baidu.com‘,verify=False)
requests.get(‘http://www.baidu.com‘,timeout=10)
使用第三方模块
retry
导入retry之后, 使用retry装饰.
2020.03
原文:https://www.cnblogs.com/jrri/p/12944147.html