2-requests模块(6节课学会爬虫)

2-requests模块(6节课学会爬虫)

  • 1,安装requests
  • 2,发送get,post请求,获取响应
  • 3,response的方法
    • 方法一(Response.text)
    • 方法二(response.content.decode())
  • 4,获取网页源码的正确打开方式(一定能获取网页正确解码的字符串)
  • 5,发送带header的请求
  • 6,使用超时参数
  • 7,Retrying模块的学习
  • 8,处理cookie相关的请求
    • 方法一,直接携带cookie请求url地址
    • 方法二,在程序中登录

1,安装requests

pip install requests

2,发送get,post请求,获取响应

Response = requests.get(url) 发送get请求,请求url地址对应的响应

发送post请求

Data={请求体的字典}
response = requests.post(url,data=data)  

在这里插入图片描述

下面模拟浏览器发送post请求,能进行翻译
(1)找到要发送的url地址
在这里插入图片描述

import requests

url = "https://fanyi.baidu.com/basetrans"

(2)要携带的数据,在最下方

在这里插入图片描述

将其复制到字典中,并变成键值对的形式

程序如下(data内容并不全面,需补充,可能是导致后方,无法返回结果的原因)

data={
    "query": "人生苦短,我学python",
    "from":"zh",
    "to": "en"
    }

3,response的方法

方法一(Response.text)

该方式往往会出现乱码,出现乱码使用response.encoding=”utf-8”进行解码

ç™¾åº¦ä¸€ä¸‹ï¼Œä½ å°±çŸ
import requests

url = "http://www.baidu.com"
response = requests.get(url)    #发送get请求
#print(response)                 #<Response [200]>尖括号表示对象,200是状态码

response.encoding="utf-8"
print(response.text)

百度一下,你就知道

方法二(response.content.decode())

把响应的二进制流转换成str类型

import requests

url = "http://www.baidu.com"
response = requests.get(url)    #发送get请求
#print(response)                 #<Response [200]>尖括号表示对象,200是状态码

#获取网页的HTML字符串
# response.encoding="utf-8"
# print(response.text)

print(response.content.decode())
Response.requests.url			#发送请求的url地址
Response.url					#response响应的url地址
Response.requests.headers		#请求头
Response.headers				#响应请求

4,获取网页源码的正确打开方式(一定能获取网页正确解码的字符串)

  当要获取网页时,使用下方的从前向后,第一种无法获取正确网页时,使用第二种,最后第三种,一定是可以能够获取的

1.response.content.decode()
2.response.content.decode("gbk")
3.reponse.content.decode('unicode-escape')
4.response.text
import requests

url = "https://fanyi.baidu.com/basetrans"
data={
    "query": "人生苦短,我学python",
    "from":"zh",
    "to": "en"
    }

reponse = requests.post(url,data=data)
print(reponse)
print(reponse.content.decode())         

  上方状态码是200,但是没有响应结果,虽然请求发出去了,但对方服务器将我们识别为爬虫了,所以不给响应

  只有url和data是不够的,还需要headers的字段内容

5,发送带header的请求

为了模拟浏览器,获取和浏览器一模一样的内容

headers = {"user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"}

  当发现user-agent请求时还不能成功,需要再加入其它的参数,如下,可以将除cookie的所有参数带上,再不成功的话就只能带上cookie(百度翻译是必须要带上cookie的,有user-agent和cookie就足够了,但cookie最好不要使用自己的容易泄露很多信息)

headers = {"user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1","referer": "https://fanyi.baidu.com/?aldtype=16047"}
reponse = requests.post(url,data=data,headers=headers)

  因为手机版的返回错误,故使用网页版的进行测试(网页版的测试成功了,手机版只有user-agent和cookie的话好像不行)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

#模拟浏览器访问

url = "https://fanyi.baidu.com/v2transapi?from=zh&to=en"
data={
    "from": "zh",
    "to": "en",
    "query": "你好",
    "transtype": "translang",
    "simple_means_flag": "3",
    "sign": "232427.485594",
    "token": "365f8c1b81a6764199c2f387c1da6e2f",
    "domain": "common"
    }
headers = {
    # "accept-encoding": "gzip, deflate, br",
    # "accept-language": "zh-CN,zh;q=0.9",
    # "cache-control": "no-cache",
    # "content-length": "150",
    # "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
    # "origin": "https://fanyi.baidu.com",
    # "pragma": "no-cache",
    # "referer":"https://fanyi.baidu.com/v",
    # "sec-fetch-destv": "empty",
    # "sec-fetch-mode": "cors",
    # "sec-fetch-site": "same-origin",
    # "x-requested-with": "XMLHttpRequest",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
    "cookie": "使用自己的"
    }

reponse = requests.post(url,data=data,headers=headers)
print(reponse.content.decode())

打印结果如下,有非常多的垃圾信息

{"trans_result":{"data":[{"dst":"Hello","prefixWrap":0,"result":[[0,"Hello",["0|6"],[],["0|6"],["0|5"]]],"src":"\u4f60\u597d"}],"from":"zh","status":0,"to":"en","type":2},1\",0]],[[\"'\",\"w_332\",\"w_321,w_332\",0],[\"Hi\",\"w_333\",\"w_322,w_333\",0],[\",\",\"w_334\",\"w_323,w_334\",0,\" \"],

6,使用超时参数

  平时请求一个网页,当网络不好等会出现一直刷新的情况,一旦有一个页面卡住,就会效率低,可以使用超时参数进行改进,超时参数避免超时,会报错可以进行错误捕获

Requests.get(url,headers=headers,timeout=3)  #3秒内必须返回响应,否则会报错

7,Retrying模块的学习

使用retry模块,将其定义一个函数,用来进行url的访问

Retry能够执行一个函数反复执行多少次当其报错的时候

Pip install retrying
import requests
from retrying import retry

#下方是电脑版的,若是手机版的,还需要更改为手机版
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}

@retry(stop_max_attempt_number=3)       #让下面被装饰的函数反复执行三次,三次全部报错才会报错,中间有一次正常,程序继续往后走
def _parse_url(url):
    print("*"*100)
    response = requests.get(url,headers=headers,timeout=5)
    return response.content.decode()

def parse_url(url):
    try:
        html_str = _parse_url(url)
    except:
        html_str = None
    return html_str

if __name__ == '__main__':
    url = "http://www.baidu.com"
    print(parse_url(url)[:100])         #只打印前100字符串,此处访问成功只出现一行*
    url1 = "www.baidu.com"              #此处地址有误
    print(parse_url(url1))              #会出现三行*

8,处理cookie相关的请求

人人网

方法一,直接携带cookie请求url地址

先在页面登录了,网页检查可得到cookie

(1)cookie放在headers中

Headers = {“user-agent”:”....”,”cookie”:”cookie 字符串”}

(2)cookie字典传给cookies参数
Cookied 的字典,与上方的headers形式是完全不同的,这不详细写了,可在网上查找

Requests.get(url,cookies=cookie_dict)

有些需要登录的是需要cookie的

方法二,在程序中登录

不直接在网上登录,而是在程序中登录,输入账号,密码
先发送post请求,获取cookie,带上cookie请求登录后的页面

1.session = requests.session()	#seesion具有的方法和requests一样
2.Session.post(url,data,headers)	#服务器设置在本地的cookie会存在session
3.Session.get(url)	#会带上之前保存在session中的cookie

在这里插入图片描述

在这里插入图片描述

我们可以通过抓包,得到登录界面的请求post地址,

在这里插入图片描述

  或者在form表单找action的url地址,或者模拟鼠标的selnum的模块,进行点击登录,输入账号密码(当密码在js中加密时)

  在某些网站,会判断我们是否有cookie来判断我们是否为爬虫,也可以使用session先请求url地址,再

  当我们使用一个用户名密码爬取大量数据,也是会被服务器认为是爬虫,这就需要有多套用户名密码,发送请求随机用户名密码进行请求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/757679.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot实现学生用品采购系统项目【项目源码+论文说明】

基于springboot实现学生用品采购系统演示 摘要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装学生用品采购系统软…

《昇思25天学习打卡营第6天|onereal》

Vision Transformer&#xff08;ViT&#xff09;简介 近些年&#xff0c;随着基于自注意&#xff08;Self-Attention&#xff09;结构的模型的发展&#xff0c;特别是Transformer模型的提出&#xff0c;极大地促进了自然语言处理模型的发展。由于Transformers的计算效率和可扩…

YOLOv10(7):YOLOv10训练(以训练VOC数据集为例)

YOLOv10&#xff08;1&#xff09;&#xff1a;初探&#xff0c;训练自己的数据_yolov10 训练-CSDN博客 YOLOv10&#xff08;2&#xff09;&#xff1a;网络结构及其检测模型代码部分阅读_yolov10网络结构图-CSDN博客 YOLOv10&#xff08;4&#xff09;&#xff1a;损失&…

MapReduce学习

目录 7.3 MapReduce工作流程 7.3.1 工作流程概述 7.3.2 MapReduce各个执行阶段 7.3.3 Shuffle过程详解 1. Shuffle过程简介&#xff08;过程分为Map端的操作和Reduce端的操作&#xff09; 2、Map端的Shuffle过程&#xff1a; 3、在Reduce端的Shuffle过程 7.4 实例分析&am…

mysql是什么

mysql是什么 是DBMS软件系统&#xff0c;并不是一个数据库&#xff0c;管理数据库 DBMS相当于用户和数据库之间的桥梁&#xff0c;有超过300种不同的dbms系统 mysql是关系型数据库&#xff0c;关系型数据库存储模型很想excel&#xff0c;用行和列组织数据 sql是一门编程语言…

LUA 语言中subtree 的使用教程

在线编辑器&#xff1a; https://www.runoob.com/try/runcode.php?filenameHelloWorld&typelua 在Lua语言中&#xff0c;"subtree"通常指的是一个子表或者子树&#xff0c;它指的是一个Lua表&#xff08;table&#xff09;中的一个部分&#xff0c;可以是一个单…

自定义注解+AOP形式监控接口调用日志

目的&#xff1a; 通过自定义注解&#xff0c;在需要监控接口调用输出日志的类或方法上&#xff0c;加上自定义注解&#xff0c;实现无侵入式接口监控。 实现&#xff1a; idea结构 1、导入pom <dependency><groupId>org.aspectj</groupId><artifactI…

你的 Python 代码太慢了吗?协程和多线程来拯救!

目录 协程&#xff08;Coroutine&#xff09; 多线程&#xff08;Multithreading&#xff09; 协程与多线程的原理 协程的原理 多线程的原理 实践案例 使用协程案例 使用多线程案例 大家好&#xff0c;在Python编程中&#xff0c;处理并发任务时&#xff0c;我们经常会…

LLM大模型:如何选择合适的 Embedding 模型?

检索增强生成&#xff08;RAG&#xff09;是生成式 AI &#xff08;GenAI&#xff09;中的一类应用&#xff0c;支持使用自己的数据来增强 LLM 模型&#xff08;如 ChatGPT&#xff09;的知识。 RAG 通常会用到三种不的AI模型&#xff0c;即 Embedding 模型、Rerankear模型以及…

数据质量管理-时效性管理

前情提要 根据GB/T 36344-2018《信息技术 数据质量评价指标》的标准文档&#xff0c;当前数据质量评价指标框架中包含6评价指标&#xff0c;在实际的数据治理过程中&#xff0c;存在一个关联性指标。7个指标中存在4个定性指标&#xff0c;3个定量指标&#xff1b; 定性指标&am…

视频号视频怎么保存到手机,视频号视频怎么保存到手机相册里,苹果手机电脑都可以用

随着数字媒体的蓬勃发展&#xff0c;视频已成为我们日常生活中不可或缺的一部分。视频号作为众多视频分享平台中的一员&#xff0c;吸引了大量用户上传和分享各类精彩视频。然而&#xff0c;有时我们可能希望将视频号上的视频下载下来,以下将详细介绍如何将视频号的视频。 方法…

[DASP]玩机!在组织一套音频系统之前,我们先要知道这套系统里面有什么东西。

前言 现在不是搞音频嘛&#xff0c;正好自己买了无源音箱&#xff0c;买了套DSP芯片玩一下 流程 上图是我们组织一套音频系统的流程&#xff0c;首先我们需要知道各个元件是做什么的 1. 音源&#xff08;例如麦克风、音乐播放器等&#xff09;&#xff1a; 产生模拟音频信号…

无忧易售新功能:一键白底转换,升级产品图片质感

在电商领域不断追求卓越与效率的今天&#xff0c;无忧易售ERP推出一键白底转换功能&#xff0c;为卖家们提供前所未有的便捷与高效&#xff0c;改变了商品图片处理的传统模式&#xff0c;革新了卖家们的图片处理体验&#xff0c;让商品展示焕然一新&#xff0c;助力商家在激烈的…

Java--常用类APl(复习总结)

前言: Java是一种强大而灵活的编程语言&#xff0c;具有广泛的应用范围&#xff0c;从桌面应用程序到企业级应用程序都能够使用Java进行开发。在Java的编程过程中&#xff0c;使用标准类库是非常重要的&#xff0c;因为标准类库提供了丰富的类和API&#xff0c;可以简化开发过…

Softmax函数的作用

Softmax 函数主要用于多类别分类问题&#xff0c;它将输入的数值转换为概率分布。 具体来说&#xff0c;对于给定的输入向量 x [x_1, x_2,..., x_n] &#xff0c;Softmax 函数的输出为 y [y_1, y_2,..., y_n] &#xff0c;其中&#xff1a; 这样&#xff0c;Softmax 函数的输…

python selenium 打开网页

selenium工具类 - 文件名 seleniumkit.py 代码如下 # -*- coding:utf-8 _*-from selenium import webdriverimport os import timefrom selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from seleniu…

【Linux】解锁并发:多线程同步技术详解与应用实践

文章目录 前言&#xff1a;1. 同步概念2. 条件变量&#xff1a;实现线程间同步的&#xff01;2.1. 条件变量是什么&#xff1f;2.2. 认识条件变量接口 3. 写一个测试代码——验证线程的同步机制4. 生产消费模型5. 生产消费模型 条件变量6. 线程池7. 可重入 VS 线程安全7.1. 概…

ModuleNotFoundError: No module named ‘_sysconfigdata_x86_64_conda_linux_gnu‘

ModuleNotFoundError: No module named _sysconfigdata_x86_64_conda_linux_gnu 1.软件环境⚙️2.问题描述&#x1f50d;3.解决方法&#x1f421;4.结果预览&#x1f914; 1.软件环境⚙️ Ubuntu 20.04 Python 3.7.0 2.问题描述&#x1f50d; 今天发现更新conda之后&#xff0…

【Python机器学习】分类向量——One-Hot编码(虚拟变量)

为了学习分类特征&#xff0c;以某国成年人收入数据集&#xff08;adult&#xff09;为例&#xff0c;adult数据集的任务是预测一名工人的收入是高于50k还是低于50k&#xff0c;这个数据集的特征包括工人的年龄、雇佣方式、教育水平、性别、每周工作时长、职业等。 这个任务属于…

第二届Godot游戏开发大赛来啦!

第二届Godot游戏开发大赛来啦&#xff01; 我们的开发大赛正式定名为Godot Hub Festival 2024&#xff0c;以后将按照年份命名。 另外&#xff0c;本次比赛将和openKylin开源社区的SIG组们合作举办(因此也可以叫Godot openKylin开发大赛)。比赛定于2024年7月1日正式开始&#x…