码迷,mamicode.com
首页 > 其他好文 > 详细

爬虫理论

时间:2020-05-23 20:02:18      阅读:41      评论:0      收藏:0      [点我收藏+]

标签:ant   out   判断   端口   其他   start   表达   源码   程序   

爬虫

字符串

字符串分两类:

  1. bytes (二进制形式)
  2. str (unicode形式)

字符集:
字符集是多个字符的集合

  • ASCII字符集
  • GB2312字符集
  • GB18030
  • Unicode字符集

字符集包含了所有需要表示字符.
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和HTTPS协议区别

  • http:
    超文本传输协议
    默认端口80

  • https:
    http + ssl (安全套接层:公私钥加解密)
    默认端口443

    更安全, 性能更低

url形式

scheme: (方案)协议. 通讯使用的协议: http/https/ftp
anthor: 锚点. 一般用#号表示. 当请求网址锚点的时候, 直接跳转网址位置到指定锚点. (带锚点与否的请求, 响应内容是相同的. 不过显示位置不同.)

爬虫分类

  • 通用爬虫: 通常指搜索引擎的爬虫
  • 聚焦爬虫: 需要爬取某些特定网站的爬虫. 通常说爬虫一般指的就是聚焦爬虫

种子url

引擎爬虫url的起始点

网页内容在哪里

  • 当前url对应的响应(response)中.页面源码===> 文字等
  • 其他url对应的响应(response)中===>图片等
  • 比如ajax中
  • js生成的 ===> 动态页面
  • 部分数据在响应当中.
  • 全部通过js生成

代理IP

使用代理

首先需要去代理网找能够使用的免费或者付费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‘:‘ip‘,‘times‘:0} # 每次使用之后,使用次数+1

  • 列表形式[{‘ip‘:ip},{‘ip2‘:ip2},] # 按照使用次数排序sort

  • 从使用次数较少的N个ip中, 随机选择一个ip

  • 检查可用性

  • 使用requests添加超时参数, 判读ip地址的质量

  • 使用在线ip质量检测网站

在请求页面的时候, 能不使用cookie就不使用cookie.
如果需要使用cookie的时候, 要判断. 单一cookie会不会影响访问.
如果不影响. 则可以通过携带之前cookie来访问.

会话保持(携带自身cookie)

  • 实例化session
  • 显示用session发送请求, 登录网站. 把cookie保存在session中
  • 再使用session请求登录之后才能访问的网站, session能够自动的携带登录成功时,保存在其中的cookie.进行请求.
# 实例化一个session对象.
session = requests.session()
data = {
	‘帐号‘:‘zhanghao‘,
	‘密码‘:‘密码‘
}
# 先获得登录之后的cookie
session.post(url,data)
# 即可访问登录之后的地址
response = session.get(url,headers)

单一会话如果可以长期使用的时候, 也可以直接免去session.post登录帐号密码这个步骤, 直接在data里面添加已经登录过的cookie值. 同样可以进行访问
如果影响, 则需要准备大量cookie(帐号密码)进行访问

不需要发送POST登录的情况

  1. cookie过期时间比较久
  2. 单次数据获取, 不需要时常更新的数据.
  3. 配合其他程序一起使用, 其他程序专门获取cookie,当前程序专门请求页面.

获取登录后页面的三种方式

  • 实例化session, post登录
  • header中添加cookie值
  • 请求方法中添加cookie参数, 键值对应(需split分割).

如何获取登录的post地址

  1. 再form表单中寻找action对应的url地址
  • post数据是input标签中的name值, value就是对应帐号密码
  1. 抓包
  • 勾选perserve log 按钮, 防止页面跳转找不到对应url(或者直接输入错误密码)
  • 寻找post数据, 确认参数
  • 固定加密的密码: 可直接通过post密码来提交加密后的对应密码来post登录
  • 动态加密密码:
    • 在当前响应中, 寻找
    • 通过js 生成,需要定位js.看如何生成.

定位想要的js事件

  • 选中绑定js事件的按钮,element listen.
  • 通过search file 来寻找关键字
  • 在chrome中添加断点, 查看js操作, 通过python进行同样的操作.形成同样的加密格式.

requests

跳过ssl验证

在访问某些网站的时候, 没有ssl证书. 则浏览器拦截.
如果用爬虫访问该网站的时候, 会直接报错
这个时候请求的时候需要将ssl证书验证关掉.对应参数verify

requests.get(‘http://www.baidu.com‘,verify=False)

设置超时

requests.get(‘http://www.baidu.com‘,timeout=10)

重新请求

使用第三方模块
retry
导入retry之后, 使用retry装饰.


2020.03

爬虫理论

标签:ant   out   判断   端口   其他   start   表达   源码   程序   

原文地址:https://www.cnblogs.com/jrri/p/12944147.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!