首页 > 其他分享 >爬虫入门之Requests库一篇学会

爬虫入门之Requests库一篇学会

时间:2025-01-18 15:29:46浏览次数:3  
标签:请求 get url movie request 爬虫 Requests 数据 入门

在爬虫开发中,request 模块或类扮演着至关重要的角色。以下是它主要的作用:
发起网络请求:这是 request 最基本的功能,通过它向目标网站发送 HTTP 请求,获取网页内容。可以指定请求方式(GET、POST 等),并能携带参数、数据、头部信息等。
处理响应结果:当服务器返回响应后,request 可以帮助解析响应内容,如文本、JSON 数据等,还可以检查状态码来判断请求是否成功。
管理会话(Session):有些网站需要登录或者保持会话状态,request 提供了会话管理功能,可以在多个请求之间共享 cookies 和其他上下文信息。
设置代理和超时:为了防止被封 IP 或者避免长时间等待无响应的请求,可以使用 request 设置代理服务器以及请求超时时间。
异常处理:在网络环境中,可能会遇到各种各样的问题,比如连接失败、DNS 解析错误等,request 支持捕获这些异常并进行相应的处理。

接下来来介绍一下简单的request使用和相关流程,让你秒入门。

编码流程

  1. 指定目标url
  2. 发起请求
  3. 获取响应数据
  4. 持久化存储

post和get

GET:将参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。

POST:通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户无法直接看到这个过程。

get请求:

代码示例(简单的get为例):

import request
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)

get直接将添加的参数都会反应在url中,用户可以直接看见。

print(r.url)
#http://httpbin.org/get?key2=value2&key1=value1

post请求:

想要发送一些编码为表单形式的数据,非常像HTML表单,只需传递一个字典给data参数。

>>> payload = {'key1': 'value1', 'key2': 'value2'}

>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print(r.text)
{
  ...
  "form": {
    "key2": "value2",
    "key1": "value1"
  },
  ...
}

反爬机制:

1. UA伪装

user-agent是请求的载体身份标识,有两种类型的标识:

  • 浏览器请求
  • 爬虫请求(会被防爬程序识别)

将爬虫请求伪装成浏览器请求,只要添加 HTTP 头部,传递一个 dictheaders 参数。

url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}#修改发起请求的UA
r = requests.get(url, headers=headers)

2. ajax动态数据

在通过request发起请求访问网页时,没有办法直接做到所见即所得,这是因为有些数据是通过非url请求得到的数据,即动态加载的数据。

要查询这些动态数据,则基于抓包工具捕获到地址栏的url所对应的数据包。

2.1. 检测动态数据

查询流程:

点击F12,打开检查

如果被全局查询成功了,那么就代表该数据为动态数据,也能找得到这个数据所对应的数据包。

2.2. 捕获动态数据

要获取动态数据,要对动态数据所在的包进行处理。

同样调用抓包工具(F12),对标头进行观察,可以得到url和其他重要参数。

将得到的信息进行requests请求,得到对应数据,流程如下:

  • 首先请求url中包含参数,我们为了规范存储,保留主url,将参数封装得到参数字典中。
  • 获取参数字典。
  • 通过Request Method判断该采取的request请求方式。
  • 避免反爬,顺便进行UA伪装。

对获取到的字符串要继续继续处理,因为这个字符串中含有大量格式以及非需要元素,我们要进行原始数据处理,获取真正所需数据。

利用json格式,将原字符串转换成列表存储的形式,利用列表遍历的方法,读取我们想要的部分。

通过观察数据格式进行选择:

import requests
#完整的url为https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0
url='https://movie.douban.com/j/search_subjects'
params={
    'type':'movie',
    'tag':'热门',
    'page_limit':'50',
    'page_start':'0'
}
headers={
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
response=requests.get(url=url,params=params,headers=headers)
#字符串处理
response=response.json()
for movie in response['subjects']:
    print(movie['title'],movie['rate'])
2.3. 密文数据

有些数据在全局搜索中搜索不到,但页面中的确含这个数据,那么这个数据为密文数据。即后台数据库中的数据并非直接显示为页面中的数据,而是后端数据经过js处理成页面中显示的数据。

如果有问题请批评指正,谢谢大家的阅读。下一个爬虫篇飞快更新中!!

标签:请求,get,url,movie,request,爬虫,Requests,数据,入门
From: https://blog.csdn.net/m0_73809878/article/details/145181646

相关文章

  • Python_CUDA入门教程学习记录
    这是本人21年读书时学习CUDA基础知识保留的一些笔记,学习时的内容出处和图片来源不记得了,仅作为个人记录!CUDA编程关键术语:host:cpudevice:GPUhostmemory:cpu内存devicememory:gpuonboard显存kernels:调用CPU上的在GPU执行的函数devicefunction:只能在GP......
  • 如何学习渗透测试?从零基础入门到精通(超详细),看完这一篇就够了
    作为一个新手,我怎么安排自己学习渗透测试?感觉渗透测试好难啊,从哪里学起?渗透测试知识点那么多,我到底应该先学习什么?我是转行从业者(有经验/没有经验),都要从头学起吗?今天,给大家做一个科普,同时,也为大家分享我的渗透学习之路,希望能对你有帮助。渗透测试门槛高不高泛舟网安这片海......
  • 带你从入门到精通——深度学习(四. 神经网络一)
    建议先阅读我之前的深度学习博客,掌握一定的深度学习前置知识后再阅读本文,链接如下:带你从入门到精通——深度学习(一.深度学习简介和PyTorch入门)-CSDN博客带你从入门到精通——深度学习(二.PyTorch中的类型转换、运算和索引)-CSDN博客带你从入门到精通——深度学习(三.PyTorch......
  • 【洛谷训练记录】【LGR-213-Div.4】洛谷入门赛 #31
    训练情况赛后反思模拟题差点红温,差一道字符串模拟题AKA题问一个数\(a\)加多少后的个位数变成\(b\),取出\(a\)的个位数,再用\(b\)去减,如果小于零答案再加十。#include<bits/stdc++.h>//#defineintlonglong#defineendl'\n'usingnamespacestd;voidsolve()......
  • C#数据结构与算法入门实战指南
    前言在编程领域,数据结构与算法是构建高效、可靠和可扩展软件系统的基石。它们对于提升程序性能、优化资源利用以及解决复杂问题具有至关重要的作用。今天大姚分享一些非常不错的C#数据结构与算法实战教程,希望可以帮助到有需要的小伙伴。C#经典十大排序算法主要讲解C#经典十大......
  • C语言新手入门---分支与循环(下)
    前言&概括鼠鼠也是才学C语言,屏幕前的各位多指教,鼠鼠耐骂。浅浅讲一下怎么使用C语言三种循环结构的语句:whilefordo…while1、while循环(1)if语句和while语句在形式上的对比两者在语法结构上基本都是一致的,再度提醒if无{}只能管理紧邻的一个句子。if(exp1){语句}while......
  • C语言新手入门---分支与循环(上)
    前言鼠鼠也是才学C语言,屏幕前的各位多指教,鼠鼠耐骂。编程里的分支结构要理解其实也就是数学里的树状图,把所需要的情况一点点根据数据分类好,再用编程语言的语法写好就行。一、if语句1、if本身用法如果判断表达式的结果为真(也就是表达式内容正确(或者说表达式返回的值非0),......
  • P1135 - 【入门】歌德巴赫猜想 -
    难度:4-题目描述任一个大于等于4的偶数都可以拆分为两个素数之和。(5.1.40)输入格式一个整数n(4<=n<=200)输出格式将小于等于n的偶数拆分为2个质数之和,列出所有方案!输入数据110输出数据14=2+26=3+38=3+510=3+710=5+5代码:#include<iostream>usingname......
  • SQL注入(非常详细)零基础入门到精通,收藏这一篇就够了
    前言之前一直有粉丝朋友,在挖漏洞过程中使用到SQL注入,希望大白给他讲解一些的SQL注入,今天大白也特地给粉丝朋友安排好了SQL注入攻击方式根据应用程序处理数据库返回内容的不同,可以分为可显注入、报错注入和盲注。可显注入攻击者可以直接在当前界面内容中获取想要获得的内......
  • 如何入门编程
    编程入门之路:从新手到开发者编程就像学习一门新语言,最开始总是有些让人畏惧。但当你开始理解那些字母组合的真正含义时,便会领悟到其美妙之处。那么,你准备好踏上这条旅程了吗?今天,我们将一起探讨如何顺利入门编程,打下坚实的基础,最终成为一名出色的开发者。选择合适的编程语......