爬虫知识点总结

爬虫总结

一、

1.什么是爬虫?

爬虫就是:模拟浏览器发送请求,获取响应

2.爬虫的分类,爬虫的流程

  • 聚焦爬虫:针对特定的网站的爬虫
    • 准备url地址 -->发送请求 获取响应–> 提取数据–> 保存
    • 获取响应–> 提取url地址,继续请求
  • 通用爬虫:搜索引擎的爬虫
    • 抓取网页–> 数据存储–>预处理–> 提供检索服务,网站排名

3.浏览器发送请求的过程

  • 爬虫请求的:url地址对应的响应
  • 浏览器获取到的内容:elements的内容=url对应的响应+js+css+图片
  • 爬虫获取的内容和elements内容不一样,进行数据提取的时候,需要根据url地址对应的响应为准进行数据的提取

4.http的请求头user-agent有什么用

  • user-agent:告诉对方服务器是什么客户端正在请求资源,爬虫中模拟浏览器非常重要的一个手段
  • 爬虫中通过把user-agent设置为浏览器的user-agent,能够达到模拟浏览器的效果
  • cookie:获取登录只有才能够访问的资源

5.利用requests模板如何发送请求和获取响应

  • response = requests.get(url)
  • response.text -> str # 根据响应信息进行有规律的推测网页的编码
    • response.encoding=“utf-8”
    • response.encoding=”gbk”
  • response.content -> bytes
    • response.content.decode(“utf8”)
      # 发送请求,获取响应
      def parse(self, url, data):
      response = requests.get(url,params=params,headers=self.headers)
      response = requests.post(url,data=data, headers=self.headers)
      return response.content.decode()
  • response.status_code
  • response.request.headers
  • response.headers
  • 一般来说名词,往往都是对象的属性,对应的动词是对象的方法
  • 获取网页源码的通用方式:
    1. response.content.decode() 的方式获取响应的html页面
    2. response.content.decode(“GBK”)
    3. response.text

6.python2和python3中的字符串

ascii 一个字节表示一个字符
unicode 两个字节表示一个字符
utf-8 边长的编码方式,1,2,3字节表示一个字符

  • python2
    • 字节类型:str,字节类型,通过decode()转化为unicode类型
    • unicode类型:unicode ,通过encode转化为str字节类型
  • python3
    • str:字符串类型,通过encode() 转化为bytes
    • bytes:字节类型,通过decode()转化为str类型

7.常见的状态响应码

  • 200:成功
  • 302:临时转移至新的url
  • 307:临时转移至新的url
  • 404:not found
  • 500:服务器内部错误

二、

1.requests中headers如何使用,如何发送带headers的请求

  • 模拟浏览器,欺骗服务器,获取和浏览器一致的内容
  • headers = {“User-Agent”:“从浏览器中复制”}
  • headers = {
    “Origin”: “http://ntlias-stu.boxuegu.com”,
    “Referer”: “http://ntlias-stu.boxuegu.com/”,
    “User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.17 Safari/537.36”
    }
  • requests.get(url,headers=headers)

2.发送带参数的请求

params = {"":""}
url_temp = “不完整的URL地址”
requests.get(url_temp,params=params)

3.requests如何发送post请求

data = {“从浏览器中form data的位置寻找”}
requests.post(url,data=data)

4.requests中如何使用代理,使用代理的目的,代理的分类

  • proxies = {“https”: “https://117.127.0.195:8080”}
  • proxies = {协议:协议+ip+端口}
  • requests.get(url,proxies=proxies)
    目的:
    • 反反爬
    • 隐藏真实ip

代理的分类

  • 高匿名代理:不知道在使用代理
  • 匿名代理:知道在使用代理,但是不知道真实ip
  • 透明代理(Transparent Proxy):对方知道真实的ip

5.requests中session类如何使用,为什么要使用session

  • session = requests.Session()
  • session.post(url,data) #cookie会保存在session中
  • session.get(url) #用session发送请求会带上之前的cookie
  • 注意:这块的session类和之前所学的session无任何关系

6.列表推导式

In [41]: [i for i in range(10)]
Out[41]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [42]: [i/2 for i in range(10)]
Out[42]: [0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5]
In [43]: [i/2 for i in range(10) if i%2==0]

三、

1.requests进行携带cookie登录

  • cookie字符串放在headers中
  • 把cookie字典交给requests请求方法的cookies

2.寻找登录接口的方法

  • form表单action对应的url地址
    • 用户名和密码的input标签中,name的值作为键,用户名和密码作为值的字典,作为post data
  • 通过抓包,定位url地址
    • form data

3.分析js,获取加密的数据

  • 观察变化
  • 定位js
    • 通过event listener定位js的位置
    • 通过搜索url地址中的关键字,通过chrome的search all file来进行搜索
  • 进行分析
    • 通过添加断点的方式分析js
  • 执行js
    • 完全的使用python模拟js的执行过程

4.requests处理ssl证书

requests.get(url,verify=False)

5.获取响应中的cookie,转化为字典

  • response = requests.get(url,headers=headers)
  • requests.utils.dict_from_cookiejar(response.cookies)

6.requests中超时参数的使用,retrying模块的使用

  • from retrying import retry
  • requests.get(url,timeout=3)
  • 通过装饰器的方式使用retry,进行异常捕获,重新执行被装饰的函数
    from retrying import retry
    @retry(stop_max_attempt_number=3)
    def fun():
    pass

7.数据的分类

  • 结构化数据 json, xml
    • 直接使用模块转化为python类型
  • 非结构化数据 html
    • re,xpath

8.json模块的使用

  • 数据交换格式
  • json.loads(json_str) json字符串转化为python类型
  • json.dumps(python_type,ensure_ascii=False,indent=2) python类型转化为json字符串
  • json.load() 把包含json的类文件对象中的数据提取出来转化为python类型
  • json.dump() python类型存入类文件对象中
  • 那么对于为什么需要模拟登陆?
    获取cookie,能够爬取登陆后的页面

9.requests模拟登陆的三种方法

  • session
    • 实例化对象
    • session.get(url) #cookie保存在session中
    • session.get(url) #带上保存在session中cookie
  • cookie方法headers中
  • cookie传递给cookies参数
    • cookie = {“cookie 的name的值”:“cookie 的value对应的值”}

10.三元运算符

a = 10 if  3<2 else 100

11.字典推导式

In [8]: {i:i+10 for i in range(10)}
Out[8]: {0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17, 8: 18, 9: 19}

In [9]: {i:i+10 for i in range(10) if i%2==0}
Out[9]: {0: 10, 2: 12, 4: 14, 6: 16, 8: 18}

四、

1.正则的语法

  • 字符
    • . 能够匹配\n之外的所有字符 re.S模式下可以匹配\n
    • \ 转义
    • [] 或的效果,从中选择一个, [abc]+ 能够匹配多个
    • | 或的效果
  • 预定义的字符集
    • \d 数字
    • \s 空白字符串,包含空格、\n,\t
    • \w 单词字符,a-zA-Z0-9_
  • 数量词
      • 匹配0次或者多次
      • 能够匹配1次或者多次
    • ? 能够匹配0-1次,让*,+非贪婪

2.re模块的常用方法

  • re.findall(“正则表达式regex”,“待匹配的字符串”) # 返回列表,或者是空列表
  • re.sub(“regex”,"_",“待替换的字符串”) # 返回字符串
  • p = re.compile(“regex”,re.S/re.DOTALL) # 返回一个p模型,编译,提高匹配效率
    • p.findall(“待匹配的字符串”)
    • p.sub("_",“待替换的字符串”)

注:re.S 匹配\n re.DOTALL 匹配Tab键

3.原始字符串r

  • 定义:相对于特殊符号而言,表示特殊符号的字面意思
  • 用途:
    • 正则中,能够忽略转义符号带来的影响,待匹配的字符串中有几个\,正则表达式中加上r,照着几个\即可
    • windows文件路径

4.xpath语法

  • xpath的安装 pip install lxml
  • // 的用途
    • //a html中所有的a
    • div//a div中所有的a,包括div下的后代节点中的a
    • a//text() a下的所有的文本
  • @ 的使用
    • a/@href 获取a的href的值
    • //a[@class=‘b’]
  • text() 的使用
    • //a/text() 获取所有的a下的文本
    • //a[text()=‘下一页’] 获取文本为下一页的a标签
    • a//text() a下的所有的文本
  • xpath包含的语法
    • //div[contains(@class,“i”)] class包含i的div标签
    • //a[contains(text(),“下一页”)] 文本包含下一页的a标签
  • 兄弟标签
    • /a/follow-sibling::ul[1]
  • xpath 选择特定位置
    • //a[1] 第一个
    • //a[last()] 最后一个
    • //a[last()-1] 倒数第二个
    • //a[postion()<4] 前三个

5.lxml模块的使用

from lxml import etree
elemen
  • 11
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值