requests基础操作

爬虫初始

爬虫相关介绍

  • 什么是爬虫
    • 就是通过编写程序,“模拟”浏览器上网,然后让其在互联网中“抓取”数据的过程。

      • 模拟:浏览器本身就是一个纯天然的爬虫工具。爬虫相关的操作都是模拟/基于浏览器为基础开发实现出来的。
      • 抓取:
        • 一种是抓取一张页面中所有的数据
        • 一种是抓取页面中局部的数据
    • 提问:如果日后你的爬虫程序没有爬取到你想要的数据,why?

      • 你的程序模拟浏览器的力度不够!
  • 爬虫在应用场景的分类
    • 通用爬虫:将一整张页面源码数据进行爬取。
    • 聚焦爬虫:将一张页面中局部/指定的数据进行抓取。建立在通用爬虫的基础上。
  • 爬虫的矛与盾(重点)
    • 反爬机制:对应门户网站,网站可以指定相关的机制阻止爬虫对其网站数据的采集
    • 反反爬策略:对应爬虫程序,爬虫可以制定相关的策略将网站的反爬机制破解,从而爬取到指定的数据

requests基础操作

  • 基本介绍

    • requests是一个基于网络请求的模块。可以使用程序模拟浏览器上网。
  • 环境安装

    • pip install requests
  • 编码流程

    • 指定url
    • 发起请求
    • 获取响应数据
    • 持久化存储
import requests
# 指定url
url = 'https://www.eastmoney.com/'
# 发起请求
response = requests.get(url=url)
response.encoding = 'utf-8'
# 获取响应数据
page_text = response.text
# 持久化存储
with open('df.html', 'w', encoding='utf-8') as f:
    f.write(page_text)

发送请求

  • 爬虫模拟浏览器主要是模拟请求参数和主要的请求头。
    • User-Agent:请求载体的身份标识。
      • 使用浏览器发请求,则请求载体就是浏览器
      • 使用爬虫程序发请求,则请求载体就是爬虫程序
  • 反爬机制:UA检测
    • 网站后台会检测请求的载体是不是浏览器,如果是则返回正常数据,不是则返回错误数据。
  • 反反爬机制:UA伪装
    • 将爬虫发起请求的User-Agent伪装成浏览器的身份。

请求方式

	# get请求
	requests.get()
	# post请求
	requests.post()

请求参数

  • url :请求地址
  • params :get请求中请求参数
  • data :post请求中请求参数
  • proxies={‘http’:‘xxx.xxx.xx.xx:xxxx’} : 代理地址请求
  • headers :请求头
    • User-Agent :身份标识
    • Referer :防盗链

获取响应数据

	# 获取html响应数据
	response.text
	# 获取json响应数据
	response.json()
	# 获取二进制响应数据(图片、音频、视频、压缩包、媒体资源)
	response.content

获取图片

不用UA伪装的简洁处理

from urllib import request
request.urlretrieve(图片地址, 图片存储路径)

防盗链

  • 现在很多网站启用了防盗链反爬,防止服务器上的资源被人恶意盗取。什么是防盗链呢?

    • 从HTTP协议说起,在HTTP协议中,有一个表头字段:referer,采用URL的格式来表示从哪一个链接跳转到当前网页的。通俗理解就是:客户端的请求具体从哪里来,服务器可以通过referer进行溯源。一旦检测来源不是网页所规定的,立即进行阻止或者返回指定的页面。

    • 哪里找Refere:抓包工具定位到某一张图片数据包,在其requests headers中获取

Cookie

  • 什么是cookie?

    • cookie的本质就是一组数据(键值对的形式存在)

    • 是由服务器创建,返回给客户端,最终会保存在客户端浏览器中。

    • 如果客户端保存了cookie,则下次再次访问该服务器,就会携带cookie进行网络访问。

      • 典型的案例:网站的免密登录
    • 为什么拿不到数据?

      • 切记:只要爬虫拿不到你想要的数据,唯一的原因是爬虫程序模拟浏览器的力度不够!一般来讲,模拟的力度重点放置在请求头中!
    • 爬虫中cookie的处理方式(两种方式):

      • 手动处理:将抓包工具中的cookie赋值到headers中即可

        • 缺点:
          • 编写麻烦
          • cookie通常都会存在有效时长
          • cookie中可能会存在实时变化的局部数据
      • 自动处理 (推荐)

        • 爬虫的session会话对象:

          • 在 爬虫里,session对象是一个非常常用的对象,这个对象代表一次用户会话(从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开)。session对象能让我们在跨请求时候保持某些参数,比如在同一个 Session 实例发出的所有请求之间保持 cookie 。
        • 基于session对象实现自动处理cookie。

          • 1.创建一个空白的session对象。
          • 2.需要使用session对象发起请求,请求的目的是为了捕获cookie
            • 注意:如果session对象在发请求的过程中,服务器端产生了cookie,则cookie会自动存储在session对象中。
          • 3.使用携带cookie的session对象,对目的网址发起请求,就可以实现携带cookie的请求发送,从而获取想要的数据。
        • 注意:session对象至少需要发起两次请求

          • 第一次请求的目的是为了捕获存储cookie到session对象
          • 后次的请求,就是携带cookie发起的请求了
#创建一个session对象
session = requests.Session()
'''
    session对象可以像reqeusts一样进行请求发送
    如果通过session进行请求发送,如果请求后会产生cookie的话,该cookie会被
    自动保存到session对象中。
'''
#使用session对象发请求,获取cookie保存到该对象中
session.get(url='第一次访问url',headers=headers)

url = '具体url'
#使用了携带cookie的session发起请求
response= session.get(url=url,headers=headers)

模拟登录

import requests
# 指定配置项
headers = {
    'User-Agent': ''
}
data = {
    "userName": "",
    "password": ""

}
# 登录url
url = 'http://download.java1234.com/user/login'
# 创建session对象
session = requests.session()
# 在session会话中获取cookie
session.post(url, headers=headers, data=data)

# 首页url
page_url = 'http://download.java1234.com/'
page_text = session.get(url=page_url, headers=headers)
page_text.encoding = 'utf-8'
html = page_text.text
with open('login.html', 'w', encoding='utf-8') as f:
    f.write(html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值