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表中。
当网站的电影排行榜更新时,爬出来的数据也会改变。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)