【Python】使用requests采集数据存入mysql或文件

一、什么是requests

requests包是一个使用Python编写的HTTP请求库,使得发送HTTP请求和处理HTTP响应变得更加简单。以下是对requests包的详细介绍:

  1. 用途

    • requests包主要用于与HTTP交互,能够发送HTTP请求和处理HTTP响应。它支持处理HTTP响应的内容,如JSON和XML数据。
  2. 主要特点和功能

    • 简单易用:requests包提供了简洁的API,使得发送HTTP请求变得直观且容易上手。
    • 丰富的请求方法:支持GET、POST、PUT、DELETE等多种HTTP请求方法,可以满足不同的网络交互需求。
    • 自动处理Cookies和会话:requests包可以自动处理Cookies,并且支持会话保持,便于进行需要登录或身份验证的网络操作。
    • 定制性强:提供了丰富的选项和参数,可以定制请求头、请求体、超时时间等,以满足特定的网络请求需求。
    • 支持多种协议:除了HTTP,还支持HTTPS、FTP等多种协议,方便访问不同类型的网络资源。
  3. 高级功能

    • SSL证书验证:在进行HTTPS请求时,requests包可以处理SSL证书验证,确保通信的安全性。如果遇到SSL证书验证失败的情况,可以选择关闭验证。
    • 代理设置:支持通过proxies参数轻松设置代理,以便在需要时隐藏真实IP地址或绕过网络限制。
    • 流式传输:支持流式传输,允许在处理大文件下载或上传时节省内存。
    • 会话对象:通过Session对象可以跨多个请求保持某些参数,如Cookies,使得多个相关请求之间可以共享状态。
  4. 性能优化

    • 当向同一个主机发送多个请求时,requests包会重用底层的TCP连接,这可以显著提高性能,尤其是在进行大量网络请求时。
  5. 错误处理和日志记录

    • requests包提供了强大的错误处理机制,可以方便地捕获和处理网络请求过程中可能出现的异常。
    • 同时,它还支持详细的日志记录功能,有助于调试和跟踪网络请求的过程。

总的来说,requests包是一个功能强大、易用性高的Python HTTP请求库,适用于各种网络编程场景,无论是简单的数据抓取还是复杂的网络交互任务都能轻松应对。

二、使用方法

以下是一个使用requests库发送HTTP请求的详细例子,包括GET请求、POST请求、设置请求头、处理Cookies和异常处理等:

import requests# 发送GET请求
def get_request_example(url):try:response = requests.get(url)response.raise_for_status()  # 检查请求是否成功print(f"GET请求成功,状态码:{response.status_code}")print(f"响应内容:{response.text}")except requests.exceptions.RequestException as e:print(f"GET请求失败:{e}")# 发送POST请求
def post_request_example(url, data):try:response = requests.post(url, data=data)response.raise_for_status()  # 检查请求是否成功print(f"POST请求成功,状态码:{response.status_code}")print(f"响应内容:{response.text}")except requests.exceptions.RequestException as e:print(f"POST请求失败:{e}")# 设置请求头
def custom_headers_example(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en-US,en;q=0.5',}try:response = requests.get(url, headers=headers)response.raise_for_status()  # 检查请求是否成功print(f"自定义请求头成功,状态码:{response.status_code}")print(f"响应内容:{response.text}")except requests.exceptions.RequestException as e:print(f"请求失败:{e}")# 处理Cookies
def cookies_example(url):cookies = {'session_id': '123456'}  # 假设的Cookie值try:response = requests.get(url, cookies=cookies)response.raise_for_status()  # 检查请求是否成功print(f"携带Cookies请求成功,状态码:{response.status_code}")print(f"响应内容:{response.text}")except requests.exceptions.RequestException as e:print(f"请求失败:{e}")# 使用示例:
get_url = "https://api.example.com/data"  # 替换为实际的GET请求URL
post_url = "https://api.example.com/submit"  # 替换为实际的POST请求URL
post_data = {'key1': 'value1', 'key2': 'value2'}  # 替换为实际的POST数据
custom_headers_url = "https://www.example.com"  # 替换为实际的需要自定义请求头的URL
cookies_url = "https://www.example.com"  # 替换为实际的需要携带Cookies的URL# 调用示例函数进行测试
get_request_example(get_url)
post_request_example(post_url, post_data)
custom_headers_example(custom_headers_url)
cookies_example(cookies_url)

请注意,上述代码中的URL和数据需要根据实际情况进行替换。此外,对于需要身份验证或特殊权限的API,可能还需要在请求中添加相应的认证信息或令牌。

三、示例(获取json数据存入mysql)

下面是一个简单的例子,演示如何使用requests库从API获取JSON数据,并使用pymysql库将数据存入MySQL数据库。

首先,你需要安装必要的库(如果还没有安装的话):

pip install requests pymysql

然后,你可以使用以下Python脚本来实现这个过程:

import requests
import pymysql# 连接MySQL数据库的参数
db_config = {'host': 'localhost','user': 'root','password': 'password','database': 'user','charset': 'utf8mb4','cursorclass': pymysql.cursors.DictCursor
}# 使用requests从API获取JSON数据
url = 'https://movie.douban.com/j/chart/top_list'
data = {'type': '24','interval_id': '100:90','action': '','start': '0','limit': '20'
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'
}
response = requests.post(url=url, data=data, headers=headers)
response.raise_for_status()  # 检查请求是否成功
data = response.json()  # 解析JSON响应
# 下面是实际返回的数据格式
'''
{'rating': ['8.9', '45'], 'rank': 20, 'cover_url': 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2531065411.jpg','is_playable': True, 'id': '27060077', 'types': ['剧情', '喜剧', '传记', '音乐'],'regions': ['美国', '中国大陆'], 'title': '绿皮书','url': 'https://movie.douban.com/subject/27060077/','release_date': '2019-03-01', 'actor_count': 44, 'vote_count': 1730968,'score': '8.9', 'is_watched': False}
'''
# 连接到MySQL数据库
connection = pymysql.connect(**db_config)
try:with connection.cursor() as cursor:# 创建表(如果表已存在,则忽略此步骤)create_table_query = '''  CREATE TABLE IF NOT EXISTS my_data (  id INT AUTO_INCREMENT PRIMARY KEY,  title VARCHAR(255),  cover_url VARCHAR(255),  types VARCHAR(255),  score decimal(10,2),  vote_count int,  release_date datetime,  -- 添加其他需要的字段  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP  )  '''cursor.execute(create_table_query)# 插入数据到MySQL数据库for item in data:insert_query = '''  INSERT INTO my_data (id,title, cover_url, types, score, vote_count, release_date) VALUES (%s, %s, %s, %s, %s, %s, %s)  '''  # 根据你的数据结构调整字段和占位符values = (item['id'], item['title'], item['cover_url'], str(item['types']), item['score'], item['vote_count'],item['release_date'])  # 提取需要插入的数据,根据实际情况调整cursor.execute(insert_query, values)# 提交事务connection.commit()
finally:connection.close()  # 关闭数据库连接

存入数据库结果示例图

在这里插入图片描述

四、示例(采集网页数据存储html文件)

下面例子演示根据手动输入的关键字从搜狐搜索相关内容,然后把搜索结果html内容以文件形式存储在本地。

import requestsif __name__ == '__main__':headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'}url = 'https://www.sogou.com/web'kw = input('请输入关键字:')params = {'query': kw}response = requests.get(url=url, params=params, headers=headers)page_text = response.textfile_name = kw + '.html'with open(file_name, 'w', encoding='utf-8') as fp:fp.write(page_text)print(file_name, '保存成功')

运行代码,输入想要搜索的关键字,将返回的整个网页存储在本地

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考--试题六--抽象工厂模式(Abstract Factory)

抽象工厂模式(Abstract Factory) 意图 提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类 结构 适用性 1、一个系统要独立于它的产品的创建、组合和表示时 2、一个系统要由多个产品系统中的一个来配置时 3、当要强调一系列相关的产品对象的设…

【Linux系统编程】第十九弹---进程状态(下)

​​​​​​​ ✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、僵尸进程 2、孤儿进程 3、运行状态 4、阻塞状态 5、挂起状态 6、进程切换 总结 1、僵尸进程 上一弹…

普通人也能创业!轻资产短视频带货项目,引领普通人实现创业梦想

在这个信息爆炸的时代,创业似乎成为了越来越多人的梦想。然而,传统的创业模式 keJ0277 往往伴随着高昂的资金投入和复杂的管理流程,让许多普通人望而却步。然而,现在有一种轻资产短视频带货项目正在悄然兴起,它以其低…

apifox接口调试工具的使用,代替postman

官网链接:Apifox (代替postman工具) 下载apifox工具 使用步骤 安装本地下载的apifox.exx 登录apifox 接口调用

从“制造”到“智造”:“灯塔”经验助力中国制造业转型升级-转载

作者:Karel Eloot,侯文皓,Francisco Betti,Enno de Boer和Yves Giraud 作为中国实体经济的主体,制造业是推动中国经济发展乃至全球制造业持续增长的重要引擎。站在历史与未来交汇的新起点上,中国制造业将背…

2024.05.14 Diffusion 代码学习笔记

配环境 我个人用的是Geowizard的环境:https://github.com/fuxiao0719/GeoWizard。 出于方便考虑,用的pytorch官方的docker容器,因此python版本(3.10)和原作者(3.9)不同,其余都是一…

【极简】docker常用操作

镜像images是静态的 容器container是动态的,是基于镜像的,类似于一个进程。 查看docker images: docker images 或者docker image ls 查看docker container情况:docker ps -a,-a意思是--all 运行一个container: doc…

DCMM(数据管理能力成熟度模型)对企业的价值

随着大数据时代的来临,数据已成为企业发展的重要驱动力。为了有效地管理和利用数据,企业需要建立一套完善的数据管理体系,而DCMM(数据管理能力成熟度模型)正是这样一个帮助企业构建和优化数据管理能力的框架。 DCMM结构…

LeetCode 235. 二叉搜索树的最近公共祖先

LeetCode 235. 二叉搜索树的最近公共祖先 1、题目 题目链接:235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表…

表的创建与操作表

1. 创建表 创建表有两种方式 : 一种是白手起家自己添,一种是富二代直接继承. 2. 创建方式1 (1). 必须具备条件 CREATE TABLE权限存储空间 (2). 语法格式 CREATE TABLE IF NOT EXISTS 表名(字段1, 数据类型 [约束条件] [默认值],字段2, 数据类型 [约束条件] [默…

C++ 结构体内存对齐

定义了两个结构体 typedef struct Cmd {uint8_t ua;uint8_t ub;uint8_t uc;uint32_t ue; } Cmd_t;typedef struct Cmd_tag {uint8_t value;uint8_t data[1]; // 将 data 定义为指向 Cmd_t 结构体的指针 } tag_t;在实际使用中,看见前人的代码是,new 一块内…

ArcGIS arcpy代码工具——关于标识码的那些事(查找最大标识码、唯一性检查、重排序、空值赋值)

系列文章目录 ArcGIS arcpy代码工具——批量对MXD文件的页面布局设置修改 ArcGIS arcpy代码工具——数据驱动工具批量导出MXD文档并同步导出图片 ArcGIS arcpy代码工具——将要素属性表字段及要素截图插入word模板 ArcGIS arcpy代码工具——定制属性表字段输出表格 ArcGIS arc…

C 深入指针(4)

目录 一、字符指针变量 1 初始化 2 与字符串数组的区别 二、数组指针变量 1 初始化 2 二维数组传参本质 三、函数指针变量 1 初始化 2 用法 四、typedef关键字 五、函数指针数组 一、字符指针变量 1 初始化 //VS2022 x64 #include <stdio.h> int main() {…

供应链投毒预警 | 开源供应链投毒202404月报发布(含投毒案例分析)

概述 悬镜供应链安全情报中心通过持续监测全网主流开源软件仓库&#xff0c;结合程序动静态分析方式对潜在风险的开源组件包进行动态跟踪和捕获&#xff0c;发现大量的开源组件恶意包投毒攻击事件。在2024年4月份&#xff0c;悬镜供应链安全情报中心在NPM官方仓库&#xff08;…

利用远程控制软件FinalShell远程连接虚拟机上的Linux系统(Windows)

一. VMware Workstation 安装CentOS Linux操作系统 传送门&#xff1a;VMware Workstation 安装CentOS Linux操作系统 1.右键打开终端 2.输入ifconfig 找到ens33对应 inet的id&#xff0c;这个就是虚拟机的ip地址图中所示为&#xff1a;192.168.5.128 3.打开finalshell 如…

YOLOv5改进 | Neck | 添加双向特征金字塔BiFPN【小白轻松上手 | 论文必备】

&#x1f680;&#x1f680;&#x1f680;本专栏所有的改进均可成功执行&#x1f680;&#x1f680;&#x1f680; 尽管Ultralytics 推出了最新版本的 YOLOv8 模型。但YOLOv5作为一个anchor base的目标检测的算法&#xff0c;YOLOv5可能比YOLOv8的效果更好。但是针对不同的数据…

抖店商品详情API接口(产品参数|详情图)

抖店商品详情API接口(产品参数|详情图) 参数仅供参考&#xff1a; {"code": 0,"msg": "调用成功","time": "1715763239","data": {"properties": [{"format": [{"message": [{&q…

Linux(九) 信号

目录 一、什么是信号 二、信号的种类 三、信号的产生 3.1 通过终端按键产生信号 Core Dump 核心转储 3.2 调用系统函数向进程发信号 3.3 由软件条件产生信号 3.4 硬件异常产生信号 四、信号的注册 五、信号的注销 六、信号的三种处理方式 七、信号的递达阻塞未决 八…

摸鱼大数据——大数据导论

大数据导论 1、概念 大数据时代: 万物皆数据 ​ 数据概念: 人类的行为及产生的事件的一种记录称之为数据 ​ 数据价值: 对数据的内容进行深入分析&#xff0c;可以更好的帮助了解事和物在现实世界的运行规律 2、大数据诞生 大数据的诞生: 跟随着互联网的发展的,当全球互联…

【面试干货】一个数组的倒序

【面试干货】一个数组的倒序 1、实现思想2、代码实现 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、实现思想 创建一个新的数组&#xff0c;然后将原数组的元素按相反的顺序复制到新数组中。 2、代码实现 package csdn;public class…