Python爬取数据并写入MySQL

关于爬虫爬取数据并存入MySQL数据库(以东方财富网上的股票数据为例,网页:深南电A(000037)资金流向 _ 数据中心 _ 东方财富网

第一步,创建数据库中的数据表

import requests
import pandas as pd
import re
import pymysql

db = pymysql.connect(host='localhost', user='root', password='ls101945', db='东方财富', port=3306, charset='utf8')
cursor = db.cursor()#建立游标
cursor.execute("DROP TABLE IF EXISTS 东方财富")#如果有表叫东方财富,删除表
sql = """
        create table 东方财富(            
        日期 char(20) not null,
        主力净流入净额 char(20),
        小单净流入净额 char(20),
        中单净流入净额 char(20),
        大单净流入净额 char(20),
        超大单净流入净额 char(20) ,
        主力净流入净占比 char(20),
        小单净流入净占比 char(20),
        中单净流入净占比 char(20),
        大单净流入净占比 char(20),
        超大单净流入净占比 char(20),
        收盘价 char(20),
        涨跌幅 char(20))
    """
try:#如果出现异常对异常处理
    # 执行SQL语句
    cursor.execute(sql)
    print("创建数据库成功")
except Exception as e:
    print("创建数据库失败:case%s" % e)

导入pymysql,连接到东方财富数据库,开启游标功能,创建游标对象(注意:当开启游标功能执行这个sql语句后,系统并不会将结果直接打印到频幕上,而是将上述得到的结果,找个地方存储起来,提供一个游标接口给我们,当你需要获取数据的时候,就可以从中拿数据),使用sql语句建立数据表,设计字段名,类型,能不能为空值。使用execute()方法,执行sql语句。在程序开发中,如果对某些代码的执行不能确定(程序语法完全正确),可以增加try来捕获异常,try:尝试执行的代码,except:出现错误的处理。

第二步,爬取数据

在目标网页中点击左键-检查-网络,刷新网页,找到数据存储的位置

 

 

url = 'https://push2his.eastmoney.com/api/qt/stock/fflow/daykline/get?cb=jQuery112301445006905131534_1634624378230&lmt'\
    '=0&klt=101&fields1=f1%2Cf2%2Cf3%2Cf7&fields2=f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58%2Cf59%2Cf60%2Cf61%2Cf62%'\
    '2Cf63%2Cf64%2Cf65&ut=b2884a393a59ad64002292a3e90d46a5&secid=0.000037&_=1634624378231'
headers = {'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36 Edg/94.0.992.50'
           }
#发送url链接的请求,并返回响应数据
response = requests.get(url=url, headers=headers)
page_text = response.text
#使用正则表达式获取数据
pat = '"klines":\[(.*?)\]'#(.*?)就是我们要取出的部分
data = re.compile(pat, re.S).findall(page_text)#compile函数编译正则匹配表达式,re.S代表可以换行匹配,使用findall函数选定数据集,也就是爬取的所有源代码

url和headers可以在其中找到,构造请求头,发送url链接的请求,并返回响应数据,使用正则表达式获取数据。

第三步,写入数据库

datas = data[0].split('","')#分割字符串

for i in range(len(datas)):
    stock = list(datas[i].replace('"', "").split(","))#把“替换为空格,以,为分隔符分割
#用sql语言写入数据表
    sql1 = """
                insert into 东方财富(
                日期,
                主力净流入净额,
                小单净流入净额,
                中单净流入净额,
                大单净流入净额,
                超大单净流入净额,
                主力净流入净占比,
                小单净流入净占比,
                中单净流入净占比,
                大单净流入净占比,
                超大单净流入净占比 ,
                收盘价 ,
                涨跌幅 )value('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')
    """ % (
    stock[0], stock[1], stock[2], stock[3], stock[4], stock[5], stock[6], stock[7], stock[8], stock[9], stock[10],
    stock[11], stock[12])#将值插入到占位符%s
    # 执行 insert 增加的语句  如果出现异常对异常处理
    try:
        cursor.execute(sql1)
        db.commit() #进行数据库提交,写入数据库
    except:
        cursor.rollback() #数据回滚,多次操作要么都执行,要么都不执行
        print('写入失败')

# 关闭游标连接
cursor.close()
# 关闭数据库连接
db.close()
print('写入成功!')

把爬取出来的数据按逗号分割,用sql语言的insert插入到东方财富数据表,value赋值。使用execute()方法,执行sql语句后一定要用commit()方法提交,在数据库里增、删、改的时候,必须要进行提交,否则插入的数据不生效。rollback()方法:不想提交增、删、改操作,用此方法回滚取消操作,有多次操作时,全部取消。用try捕获异常,如果执行sql或向数据库提交时有异常,就取消所有对数据库的修改操作。

最终效果

  • 13
    点赞
  • 157
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要使用Python爬取数据并将其写入数据库,您需要使用以下步骤: 1. 安装必要的库:您需要安装Python库来进行爬取数据库连接。例如,requests库用于发出HTTP请求,beautifulsoup4库用于解析HTML,以及MySQLdb或SQLAlchemy库用于连接数据库。 2. 连接数据库:您需要连接您的数据库。如果您使用MySQL数据库,则可以使用MySQLdb库。如果您使用其他类型的数据库,则可以使用适当的库。 3. 爬取数据:您需要使用requests和beautifulsoup4库来爬取数据。您可以使用requests库发出HTTP请求并获取HTML响应。接下来,您可以使用beautifulsoup4库解析HTML并提取所需的数据。 4. 将数据写入数据库:一旦您从网站上抓取了所需的数据,您需要将其插入到数据库中。您可以使用MySQLdb或SQLAlchemy库来实现这一点。您需要编写一个SQL查询,然后将数据作为参数插入数据库中。 以下是一个示例代码,它使用PythonMySQLdb库从网站上爬取书籍数据并将其保存到MySQL数据库中: ```python import requests from bs4 import BeautifulSoup import MySQLdb # 连接数据库 db = MySQLdb.connect(host="localhost", user="root", passwd="", db="books") cursor = db.cursor() # 爬取数据 url = "https://www.example.com/books" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") books = soup.find_all("div", class_="book") # 将数据写入数据库 for book in books: title = book.find("h2").text.strip() author = book.find("p", class_="author").text.strip() sql = "INSERT INTO books (title, author) VALUES (%s, %s)" values = (title, author) cursor.execute(sql, values) db.commit() db.close() ``` 请注意,此代码仅供参考,并且需要根据您的具体情况进行更改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值