Python爬虫转移到Mysql数据库中最后汇总Excel表格

Python爬虫转移到Mysql数据库中最后汇总Excel表格,第1张

import pymysql
import requests
import pandas as pd

这个 *** 作一共需要三个库 ,都可以在cmd以管理员身份pip install pymysql/requests/pandas下载

con=pymysql.connect(host='localhost',user='root',password='yourpwd',
db='python+mysql+excel',port=3306) #数据库连接
cur=con.cursor()#创建游标
def create():
    movie_sql='''
        create table movie(
            id int auto_increment primary key not null,
            title varchar(100) character set utf8 collate utf8_general_ci not null,
            url varchar(100) character set utf8 collate utf8_general_ci not null,
            rate float not null)
    '''
    cur.execute(movie_sql)
    con.commit()

 主键primary key作为约束也可以单独在最后指定。

在cur.execute(sql)获取结果,con.commit()提交事务

def get_data():

    url='https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=330&page_start=0%27'
    headers={
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36'
    }
    json_data = requests.get(url,headers=headers).json()

    for i in json_data['subjects']:
        insert(i['title'],i['url'],i['rate'])

统一资源定位系统(uniform resource locator;URL

headers浏览器头部名是为了模拟浏览器向服务器发送请求,‘subjects’是‘title’、‘url’、‘rate’的上一层目录,字典存储,‘title’、‘url’、‘rate’是都是key。爬虫相关的知识很多,对此也比较感兴趣,后面也会记录我的学习过程。

def insert(title,url,rate):
    sql="insert into movie(title,url,rate) values('"+str(title)+"','"+str(url)+"','"+str(rate)+"')"
    cur.execute(sql)
    con.commit()

 insert中我有一个小疑问,为什么values后面是'"+str(title)+"'的形式,而‘str(title)’就会被完全认作字符串?希望有大神的点拨一二。

def select(movie_name):
    cur.execute(('select * from movie where title={}').format(movie_name))
    results=cur.fetchall()
    for row in results:
        Id=row[0]
        title=row[1]
        url=row[2]
        rate=row[3]
        print('id=%s,title=%s,url=%s,rate=%s' % (Id,title,url,rate))

fetchall() 函数返回多个元组,即返回多个记录(rows),如果没有结果 则返回 () 

遍历查到的结果后,将每一行的信息分开格式化表示。也可以用format函数格式化

print(('id={},title={},url={},rate={}').format(Id,title,url,rate))
print(('id={0},title={1},url={2},rate={3}').format(Id,title,url,rate))
def update(Id,rate1):
    sql='update movie set rate={1} where Id = {0}'.format(Id,rate1)
    cur.execute(sql)
    con.commit()

 调用函数时,传参修改电影的Id和修改的评分。

def delete(Id):
    sql='delete from movie where Id = {0}'.format(Id)
    cur.execute(sql)
    con.commit()
def query_data(sql,excel_name):
    df=pd.read_sql(sql, con=con)
    df.to_excel(excel_name)

用pandas库,将mysql数据库获取的数据, 存入excel表中(若没有excel表则自行建立)

执行代码示例如下:

create()
get_data()
insert('python','http://',9.9)
select('movie_name')
update(10,9.9)
delete(10)
query_data('''select * from movie''','电影推荐.xlsx')
con.close()#无论哪种 *** 作,最后记得关闭python和mysql的连接


起初利用create()建表,mysql就会建立一个空表,这里用mysqlworkbench(数据库建模工具)做演示。在输入网址url和浏览器请求头User-Agent之后,get_data()就会把网站上的数据存到mysql中。利用insert()可以添加电影列表中添加信息;利用select()可以在表中选取电影展示到python中;利用update()可以修改表中电影的评分;利用delete()可以将表中指定电影行删去。利用pandas库调用query_data()函数(在query_data中写sql语句时,可以利用where 、group by 、having 、order by 、limit 5,10抑或是单表聚合查询、⼦查询、多表查询(包括内连接、外连接查询)满足输出数据的需求),使mysql的实时数据导入到同一文件夹的excel表中。

当网站的电影排行榜更新时,爬出来的数据也会改变。

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/921052.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存