python爬虫学习过程的简单总结

398次阅读
没有评论
python爬虫学习过程的简单总结

文章目录

1.什么是爬虫

  • 爬虫就是 模拟客户端(浏览器)发送网络请求,获取响应,按照规则拉取数据的程序
  • 模拟客户端(浏览器)发送网络请求:照着浏览器发送一模一样的请求,获取和浏览器一模一样的数据

2.爬虫的的数据去哪了

  • 呈现出来:展示在网页上,或者展示在app上
  • 进行分析:从数据中寻找一些规律

3.浏览器的请求

  • 统一资源定位符url
    • 在Chrome中点击检查,点到network
    • url = 请求协议(http&https)+网站的域名+资源的路径+参数
  • 浏览器请求url地址
    • 当前url对应的响应+jd+css+图片——>elements中的内容
  • 爬虫请求url地址
    • 只能请求当前url对应的响应- elements的内容和爬虫获取的
  • url地址的响应不同,爬虫中需要以当前url地址对应的响应为准提取数据
  • 当前url地址对应的响应在哪里
    • 从network中找到当前的url地址,点击response
    • 或在页面上右键显示网页源码

4.认识HTTP、HTPS

  • HTTP:超文本传输协议
    • 以明文的形式传输
    • 效率更高,但不安全
  • HTTPS:HTTP + SSL(安全套接字层)
    • 传输之前数据先加密,之后解密获取内容
    • 效率较低,但是安全
  • get请求和post请求的区别
    • get请求没有请求体,post有,get请求把数据放到url地址中
    • post请求常用于登录注册
    • post请求携带的数据量比get大,多,常用于传输大文本的时候
  • HTTP协议之请求
    • 1.请求行
    • 2.请求头
      • User-Agent:用户代理:对方服务器能够通过 user-agent知道当前请求对方资源的是否是浏览器、什么浏览器
        • 如果我们需要模拟手机版的浏览器发送网络请求,对应的,就需要把user-agent改成手机版
      • Cookie:用来存储用户信息的,每次请求会被携带上发送给对方的浏览器
        • 要获取登录后才能访问的页面
        • 对方的服务器会通过cookie来判断我们是否是一个爬虫
    • 3.请求体
      • 携带数据
      • get请求没有请求体
      • post请求有请求体
  • HTTP协议之响应
    • 1.响应头
      • Set-Cookie:对方服务器通过该字段设置cookie到本地
    • 2.响应体
      • url地址所对应的响应

5. requests模块的学习

  • 使用之前,安装requests库
    • 打开所安装python文件夹中的Scripts文件夹,打开cmd(输入cmd),输入 pip install resquests
  • 发送get,post请求,获取响应
    • response = requests.get(url) #发送get请求,请求url地址对应的响应
    • response = requests.post(url) #发送post请求
  • response的方法
    • response.text
      • 该方式往往会出现乱码,出现乱码在之前添加response.encoding=“utf-8”
    • response.content.decode()
      • 把响应的二进制字节转化为str类型
    • response.request.url #发送请求的url地址
    • response.url #响应请求
    • response.request.headers #请求头
    • response.headers #发送请求的url地址
  • 获取网页源码的正确打开方式(通过下面三种方式一定能够获得网页正确源码之后的字符串)
    • 1.response.content.decode()
    • 2.response.content.decode(“gbk”)
    • 3.response.text
  • 发送带headers的请求
    • 为了模拟浏览器,获取和浏览器一模一样的数据
      headers = {“User-Agent”:" … “,“Referer”:” … "}
      response = requests.get(url,headers=headers)
  • 使用超时参数
    • requests.get(url,headers=headers,timeout=3) #3秒之内必须返回响应,否则会报错
  • retrying 模块的学习
    • pip install retrying

    from retrying import retry @retry(stop_max_attempt_number=3) #让程序执行三次,如果三次都报错则报错,如果有一次没报错,则程序往下执行def fun1(): #定义一个函数fun1 print("this is the fun") raise ValueError("this is error") #程序自行报错

  • 处理cookie相关的请求
  • 1.直接携带cookie请求url地址
    • 1.cookie放在headers中

    headers={"User-Agent":"…..","Cookie":"….."}

    • 2.cookie字典传给cookie参数

    cookie字典{"Name":"Value", ......} requests.get(url,cookie=cookie_dict)

  • 2.先发送post请求,获取cookie,带上cookie请求登录后的页面
    • 1.session =request.session() #session请求登录后的页面
    • 2.session.post(url,data,headers) #服务器设置在本地的cookie会保存在session中
    • session.get(url) #会带上之前保存在session中的cookie,能够请求成功

6.数据提取方法

json文件
  • 数据交换格式,看起来像python类型(列表,字典)的字符串
  • 使用json之前需要导入 import json
  • json.loads
    • 把json字符串转化为python类型
    • json.loads(json字符串)
  • json.dumps
    • 把 python类型抓化为json字符串
    • json.dumps({})
    • json.dumps({},ensure_ascii=False,indent=2)
      • ensure_ascii:让中文显示为中文
      • indent:能够让下一行在上一行的基础上空格
  • 豆瓣电影电视剧爬虫案例
xpath和lxml方法
  • xpath
    • 一门从html中提取数据的语言
  • xpath语法
    • 谷歌xpather helper 插件:帮助我们从element中定位数据
    • 1.选择节点(标签)
      • /html/head/meta:能够选中html下的head下的所有的meta标签
    • 2.//:能够从任意节点开始选择
      • //li当前页面上的所有的li标签
      • /html/head/linkhead下的所有的link标签
    • 3.@符号的用途
      • 选择具体某个元素://div[@class="feed-infinite-wrapper"]/ul/li(选择class=“feed-infinite-wrapper”的div下的li)
      • a/@href:选择a的href的值
    • 4.获取文本:
      • /a/text():获取a下的文本
      • /a//text():获取a下的所有文本
  • lxml
    • 安装pip install lxml
    • 使用

from lxml import etree element = etree.HTML("html字符串") element.xpath("")

7.基础知识点的学习

  • format:字符串格式化的一种方式

"{}博客".format(1) "{}博客".format([1,2,3]) #列表 "{}博客".format({1,2,3}) #字典 "{}博客{}".format({1,2,3},[1,2,3])

  • 列表推导式
    • 帮助我们快速的生成包含一堆数据的列表
      [i+10 for i in range(1,10)] –> [10,11,12,…,19]
      ["10月{}日".format(i) for i in range(1,20)] –>[“10月1日”,“10月2日”,…''10月9日"]
  • 字典推导式
    • 帮助我们快速的生成包含一堆数据的字典
      {i+10:i for i in range(10)}–>{10:0,11:1,…19:9}
      {"a{}".format(i): 10 for i in range(3)}–> {“a0”:“10”,“a1”:“10”,“a3”:“10”}
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-24发表,共计3316字。
新手QQ群:570568346,欢迎进群讨论 Python51学习