【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.xdnf.cn/news/1423852.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

uni-app:音频播放 uni.createInnerAudioContext()

uni.createInnerAudioContext() 创建并返回内部 audio 上下文 innerAudioContext 对象 简单实现音频播放: let innerAudioContext uni.createInnerAudioContext(); innerAudioContext.src ../../../../static/ok.MP3;//音频地址 innerAudioContext.play(); inn…

SL3038 48V/60V电动车里程增程器电源驱动芯片 大电流3A

在电动车领域中,电池续航能力一直是制约其广泛应用的关键因素之一。为了提高电动车的续航能力和使用效率,各大厂商纷纷投入研发,寻求更为先进的电源驱动芯片解决方案。其中,SL3038 48V/60V电动车里程增程器电源驱动芯片以其卓越的…

我是如何利用AI提高内容生产效率的

文章目录 如何利用AI提高内容生产效率?自动化内容生成内容推荐与个性化数据分析与内容优化自动化编辑与翻译虚拟助手与自动化排版智能内容管理与版本控制情感分析与内容优化实时反馈与即时调整跨平台内容适配智能内容生成工具总结 如何利用AI提高内容生产效率? 简介&#xff…

JAVA二手车交易二手车市场系统源码支持微信小程序+微信公众号+H5+APP

二手车交易二手车市场系统:重塑购车新体验 随着汽车消费市场的日益成熟,二手车交易逐渐成为消费者购车的新选择。为了提供更加便捷、透明、安全的二手车交易环境,我们推出了“二手车交易二手车市场系统”,旨在为买卖双方搭建一个…

Stable Diffusion基础界面介绍

SD是stable diffusion的简称,AI绘画的一个开源应用,(不需要科学上网),目前使用的版本是B站UP秋葉aaaki整理的最终版。 安装教程详见 B站up主 秋葉aaaki,教程下有提供stable diffusion的下载链接。 安装必要的三个基础…

【python数据预处理系列】使用Pandas的factorize()函数进行类别编码(整数编码)

在Pandas中,factorize()函数主要用于将分类变量转换为整数编码,这对于减少内存使用或准备数据进行某些统计分析非常有用。 它实际上是将列的唯一值映射到从0开始的整数序列上。 假设有一个DataFrame,其中一列包含一些类别值,你希望…

AIGC行业现在适合进入吗

简介 进入人工智能(AI)与游戏行业整合(AIGC)领域需要考虑当前的市场需求和行业发展阶段: 1、市场需求:目前,人工智能和游戏行业都在不断发展壮大,并且两者的结合也逐渐成为一个热门领…

【吊打面试官系列】Java高并发篇 - 并发编程三要素?

大家好,我是锋哥。今天分享关于 【并发编程三要素?】面试题,希望对大家有帮助; 并发编程三要素? 1、原子性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要…

杭州首场!ClickHouse技术沙龙来了,NineData架构师周金义将分享《ClickHouse 数据管理与同步的关键技术》

2024年 5 月 18 日,ClickHouse官方首届杭州 Meetup 活动即将举行。本次活动由 ClickHouse 和阿里云主办,NineData 和云数据库技术社区协办。本次技术沙龙将围绕ClickHouse的核心技术、应用案例、最佳实践、数据管理、以及迁移同步等方面,和行…

四.Ubuntu安装postgresql数据库

四.Ubuntu安装postgresql数据库 1.安装postgresql数据库命令:apt install postgresql postgresql-contrib 依次回车,等待安装完成。 2.以postgres用户登录PostgreSQL,命令:sudo -u postgres psql 修改postgres密码命令&#x…

「AIGC」Python实现tokens算法

本文主要介绍通过python实现tokens统计,避免重复调用openai等官方api,开源节流。 一、设计思路 初始化tokenizer使用tokenizer将文本转换为tokens计算token的数量二、业务场景 2.1 首次加载依赖 2.2 执行业务逻辑 三、核心代码 from transformers import AutoTokenizer imp…

【LeetCode:23. 合并 K 个升序链表 + 链表 + 归并 + 递归】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

安泰ATA-7015高压放大器在材料极化中的应用研究

材料极化是材料科学中一个重要的研究领域,它涉及到材料内部电荷和极化性质的调控和分析。高压放大器在材料极化研究中起着至关重要的作用,通过提供高压力和高电场条件,研究人员可以深入探讨材料的电子结构、相变行为以及许多其他关键性质。 材…

苹果应用App ID、证书及描述文件申请

在iOS开发和发布过程中,主要涉及两种证书和描述文件: 1、开发证书及描述文件 证书: 用途:用于在开发阶段将应用程序部署到开发者的iOS设备进行调试和测试。 使用场景: 当开发者需要在真实设备上测试应用程序的功能、性…

nodemon运行ts文件

https://juejin.cn/post/7035637086451400734 nodemon经常用来调试js文件,大家都是知道的,但是用nodemon来调试ts文件,大家试过吗? 如果直接运行nodemon index.ts是会报错的。 ts 复制代码 //index.ts console.log(1) 需要全局…

SQLserver - 笔记

1 SQLserver - 用户管理 4、SQL SERVER数据库用户管理_哔哩哔哩_bilibili 创建用户 - user 2.选择用户,修改属性

【Maven】简介_下载安装

1.maven简介 项目管理工具项目对象模型 project object model (POM) 一个项目:清理、编译、测试、打包、发布、部署 1.1 为什么需要使用maven 组装机和品牌机的概念IDE (集成开发环境)不是万能的依赖大量的手工操作,编译、测试、…

对于fastjson之rmi利用问题的解决

前言 也是被一个问题困扰了好久,都要崩溃了,就为了一个问题调试半天的代码,最后终于解决了,现在做一个记录,幸好没有放弃,感觉学java是比较慢的,但是学java就是重在分析能力的提升,…

【架构-16】安全架构设计理论

信息安全面临的威胁 主动攻击:可能改变信息或危害系统的攻击就是主动攻击 被动攻击:攻击者的目的只是获取信息,不会改变信息或危害系统。(网络监听、信息截取、流量分析) 信息安全体系架构设计 信息安全体系架构。具…

手机触控面板中应用的电容式触摸芯片

手机触控屏(Touch panel)又称为触控面板,是个可接收触头等输入讯号的感应式液晶显示装置,当接触了屏幕上的图形按钮时,屏幕上的触觉反馈系统可根据预先编程的程式驱动各种连结装置,可用以取代机械式的按钮面…