python 之禅:
Beautiful is better than ugly.(美丽优于丑陋)
Explicit is better than implicit.(直白优于含蓄)
Simple is better than complex.(简单优于复杂)
Complex is better than complicated.(复杂优于繁琐)
Readability counts.(可读性很重要)
1.通用性爬虫(搜索引擎)
pagerank:
网页搜索排名–nofollow算法可以抵制一些垃圾投票
以图搜图
听歌识曲
robots协议(道德层面),保存在根目录下:https://www.taobao.com/robots.txt
2.聚焦爬虫
HTTP:
超文本传输协议,默认端口80
2016年提出HTTP/2.0 版本新增并发请求
HTTPS(http + ssl):
http + ssl(安全套接字层),默认端口443
相对于http更安全,但是性能较低
页面数据获取途径:
- 当前url相应中
- ajax异步请求相应中
- js生成
相应状态码:
- 1xx:浏览器发送的请求不完整
- 2xx:请求正常完成
- 3xx:
- 302, 307:重定向
- 304:资源未发生变更,直接使用本地缓存
- 4xx:请求的资源地址有误,服务器无法提供相应
- 404:请求路径不存在
- 403:拒绝访问(权限)
- 5xx:服务器相应过程中出现错误
- 500:服务器内部错误
字符
字符集:多个字符的集合(ASCII, GB2312, GB18030, Unicode)
ASCII 编码是1个字节,Unicode编码是2个字节,UTF-8是Unicode边长的编码方式(可以是1, 2, 3个字节)
r = requests.get(url):
r.encoding(‘utf-8’)
r.text (默认由headers进行推测,获得解码后str类型数据)
常用方法:
r.content # 获得bytes类型数据
r.status_code
r.request.headers
r.headers
命令行修改:
~/.bashrc
添加:
alias fanyi='python /User/linlin/Desktop/fanyi.py'
source ~/.bashrc
代理:
为什么使用代理?
- 让服务器以为不是同一个客户端在请求
- 防止我们的真实地址被泄露,防止被追究
nginx为反向代理
保持登陆状态
1.携带登录后cookie至headers中
2.在请求方法中添加cookies参数(字典)
3.创建session实例
se = requests.session()
se.post() # 登陆,获得登陆成功cookie
se.get() # 自动携带cookie发送请求
js定位:
- 选择会出发js事件的按钮,点击event listener
- search all file(request_url或者其中关键字)
获取响应中的cookie
response.cookies # 获取cookie对象
requests.utils.dict_from_cookiejar(response.cookies) # 获得cookie字典
requests.cookiejar_from_dict({key:value}) # 将字典转化为cookie对象
url地址编解码:
requests.utils.unquote() # 解码
requests.utils.quote() # 编码
SSL证书验证跳过
requests.get(url, verify=False)
请求超时验证
requests.get(url,timeout=10) # 超时时间10秒
第三方包安装
- pip install package_name
- python setup.py install
- pip install *.whl
返回响应中不是标准json字符串
callback = jsonp1参数可以省略
格式化输出
pprint() # pretty print
格式化写入
f.write(json.dumps(str, ensure_ascii = False, indent = 4)
类文件对象
具有read()
或者wrtie()
的对象就是类文件对象
可以使用json.load()
和json.dump()
转换
正则表达式
.
匹配除\n之外的所有\d
数字\D
非数字\s
空白字符(空格),包含\r\t\n\f\v
\S
非空白\w
单词[A-Za-z0-9_]
\W
非单词字符*
任意次数