python-spider个人笔记

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 非单词字符
  • * 任意次数
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值