【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 requests

if __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.text
    file_name = kw + '.html'
    with open(file_name, 'w', encoding='utf-8') as fp:
        fp.write(page_text)

    print(file_name, '保存成功')

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

在这里插入图片描述

相关推荐

  1. python自动生成数据内容存入MySQL

    2024-05-16 14:16:07       15 阅读
  2. Python将传感器采集数据写入Mysql

    2024-05-16 14:16:07       12 阅读
  3. 日志数据采集存储

    2024-05-16 14:16:07       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-16 14:16:07       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-16 14:16:07       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-16 14:16:07       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-16 14:16:07       18 阅读

热门阅读

  1. 机器学习 - 朴素贝叶斯

    2024-05-16 14:16:07       11 阅读
  2. 解决el-dialog弹框出现后页面滚动条可滚动问题

    2024-05-16 14:16:07       13 阅读
  3. nginx中,location匹配规则解析

    2024-05-16 14:16:07       11 阅读
  4. ubuntu 修改网卡名

    2024-05-16 14:16:07       7 阅读
  5. .net 框架基础(一) 字符、字符串

    2024-05-16 14:16:07       12 阅读
  6. leensa邀请码

    2024-05-16 14:16:07       10 阅读
  7. AI绘画原理及工具介绍

    2024-05-16 14:16:07       14 阅读
  8. Vue.js介绍

    2024-05-16 14:16:07       10 阅读
  9. 【Leetcode 每日一题】20. 有效的括号

    2024-05-16 14:16:07       13 阅读
  10. 【哈希】Leetcode 242. 有效的字母异位词【简单】

    2024-05-16 14:16:07       10 阅读
  11. Linux- cron调度进程

    2024-05-16 14:16:07       11 阅读
  12. 深度解析Kubernetes网络模型

    2024-05-16 14:16:07       10 阅读
  13. FunASR语音识别快速上手指南

    2024-05-16 14:16:07       10 阅读
  14. SDL系列(二)—— 渲染窗口与BMP图片

    2024-05-16 14:16:07       13 阅读
  15. Gone框架介绍19 -如何进行单元测试?

    2024-05-16 14:16:07       12 阅读