python爬虫基础

http协议

  1. http超文本传输协议,通俗讲就是浏览器与web服务器传输数据格式的协议,http协议是一个应用层的协议
  2. http协议是基于Tcp/IP协议,发送数据之前需要建立好连接

网络传输Tcp/IP四层模型

  • 应用层
    1. 负责处理特定的应用程序细节.
  • 传输层
    1. 主要为两台主机上的应用提供端到端的通信.
  • 网络层
    1. 处理分组在网络中的活动,比如分组的选路.
  • 网络接口层
    1. 包括操作系统中的设备驱动程序、计算机中对应的网络接口卡.

http请求过程

  1. 浏览器在拿到域名对应的ip后,先向地址栏中的url发起请求,并获取响应

  2. 在返回的响应内容(html)中,会带有css,js,图片等url 地址,以及ajax代码,浏览器按照响应内容中的顺序依次发出其它的相应请求,并获取相应

  3. 浏览器每获取一个响应就对展示出的结果进行添加(加载), js,css 等内容会修改页面的内容,js也可以重新发送请求,获取响应

  4. 从获取第一个响应并在浏览器中展示,直到最终获取全部响应,并在展示的结果中添加内容或修改————这个过程叫做浏览器的渲染

注意

  • 在爬虫中,爬虫只会请求url地址,对应的拿到url地址对应的响应
  • 浏览器渲染出来的页面和爬虫请求的页面很多时候并不一样,是因为爬虫不具备渲染的能力
  • 浏览器最终展示的结果是由多个url地址分别发送的多次请求对应的多次响应共同渲染的结果
  • 以在爬虫中,需要以发送请求的一个url地址对应的响应为准来进行数据的提取

requests模块

  1. requests模块介绍

    Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。

    警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。

  2. requests模块作用
    • 发送http请求,获取响应数据
  3. 安装pythonjar包
    pip install requests
    
  4. request模块发送get请求
  5. # 1.2.1-简单的代码实现
    import requests 
    
    # 目标url
    url = 'https://www.baidu.com' 
    
    # 向目标url发送get请求
    response = requests.get(url)
    
    # 打印响应内容
    response.encoding = 'utf8'
    print(response.text)
    
  6. 常用方法
    print(response.content.decode())
    
  7. Requests.txt与Requests.content区别
    • Requests.txt
      • 类型:str
      • 解码类型: requests模块自动根据HTTP 头部对响应的编码作出有根据的推测,推测的文本编码
    • Requests.content
      • 类型:bytes
      • 解码类型:无
  8. 通过对response.content进行decode,来解决中文乱码
    • response.content.decode() 默认utf-8
    • response.content.decode("GBK")
    • 常见的编码字符集
      1. utf8
      2. gbk
      3. gb2312
      4. ascii
      5. iso-8859-1
  9. response响应对象的其它常用属性或方法
    • response.url响应的url;有时候响应的url和请求的url并不一致
    • response.status_code 响应状态码
    • response.request.headers 响应对应的请求头
    • response.headers 响应头
    • response.request._cookies 响应对应请求的cookie;返回cookieJar类型
    • response.cookies 响应的cookie(经过了set-cookie动作;返回cookieJar类型
    • response.json()自动将json字符串类型的响应内容转换为python对象(dict)
    import requests
    
    
    #目标url
    
    url = 'http://www.baidu.com'
    
    response = requests.get(url)
    
    print(response.url)
    print(response.status_code)
    print(response.request.headers)
    print(response.headers)
    print(response.request._cookies)
    print(response.cookies)
    
  10. 发送带header的请求
 import requests
 
 url = 'http://www.baidu.com'
 
 response = requests.get(url)
 
 print(response.content.decode())
 
 # 打印响应对应请求的请求头信息
 print(response.request.headers)
  1. 在headers参数中携带cookies
import requests
	   
url = 'https://github.com/JokerHai'
	   
#构造请求字典
headers = {
	       'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 		(KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'
	       'Cookies':'浏览器cookie字符串'
	   }
# 请求头参数字典中携带cookie字符串
response = requests.get(url, headers=headers)
   
print(response.content.decode())
   
  1. cookies参数的使用

    cookies参数的形式:字典

    cookies = {"cookie的name":"cookie的value"}

    • 该字典对应请求头中Cookie字符串,以分号、空格分割每一对字典键值对
    • 等号左边的是一个cookie的name,对应cookies字典的key
    • 等号右边对应cookies字典的value

    cookies参数的使用方法

    response = requests.get(url, cookies)

    将cookie字符串转换为cookies参数所需的字典:
    cookies_dict = {cookie['name']:cookie['value'] for cookie in cookies_str.split('; ')}

    注意:cookie一般是有过期时间的,一旦过期需要重新获取

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值