用Python爬取电影评分保存进MySQL
在今天的数字化时代,电影评分是人们选择观看电影的重要参考因素之一。那么,如何通过Python爬取电影评分数据,并保存到MySQL数据库中呢?本文将为你提供一种简单的方法来实现这个目标。
准备工作
在开始之前,我们需要确保已经安装了Python和MySQL,并且已经安装了相应的Python库。在本文中,我们将使用requests
库来发送HTTP请求,BeautifulSoup
库来解析HTML,并使用pymysql
库来连接MySQL数据库。
你可以通过以下命令来安装这些库:
pip install requests beautifulsoup4 pymysql
爬取电影评分数据
首先,我们需要确定我们要爬取的电影评分网站。这里我们选择了IMDb(互联网电影数据库)作为示例。
import requests
from bs4 import BeautifulSoup
def get_movie_ratings(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
ratings = soup.find_all('span', class_='rating')
movie_ratings = []
for rating in ratings:
movie_ratings.append(rating.get_text())
return movie_ratings
url = '
movie_ratings = get_movie_ratings(url)
print(movie_ratings)
在上面的代码中,我们定义了一个get_movie_ratings
函数,它接受一个URL作为参数,并返回一个包含电影评分的列表。我们使用requests
库发送HTTP请求,然后使用BeautifulSoup
库解析HTML,从中提取出电影评分数据。
连接MySQL数据库
接下来,我们需要连接MySQL数据库,并创建一个表来保存电影评分数据。
import pymysql
# 连接数据库
connection = pymysql.connect(
host='localhost',
user='root',
password='password',
db='movie_ratings'
)
# 创建表
cursor = connection.cursor()
create_table_query = '''
CREATE TABLE IF NOT EXISTS ratings (
id INT PRIMARY KEY AUTO_INCREMENT,
movie_rating VARCHAR(5)
)
'''
cursor.execute(create_table_query)
connection.commit()
在上面的代码中,我们使用pymysql
库来连接MySQL数据库。我们需要提供数据库的主机地址、用户名、密码和数据库名称。然后,我们使用cursor
对象执行SQL语句来创建一个名为ratings
的表,该表包含一个自增的ID列和一个电影评分列。
将数据保存到数据库
现在,我们已经准备好将电影评分数据保存到数据库中了。
# 将数据保存到数据库
insert_query = 'INSERT INTO ratings (movie_rating) VALUES (%s)'
for rating in movie_ratings:
cursor.execute(insert_query, (rating,))
connection.commit()
# 关闭数据库连接
connection.close()
在上面的代码中,我们使用INSERT
语句将电影评分数据插入到数据库中。我们使用%s
作为占位符,并传入一个包含电影评分的元组。然后,我们使用connection.commit()
来提交事务,并使用connection.close()
来关闭数据库连接。
结语
恭喜!现在你已经学会了用Python爬取电影评分并保存到MySQL数据库中。这个简单的例子向你展示了如何使用requests
和BeautifulSoup
库来爬取网页数据,并使用pymysql
库连接和操作MySQL数据库。当然,这只是一个开始,你可以根据自己的需求进一步扩展和优化代码。
希望本文对你有所帮助!如果你还有任何问题或想了解更多关于Python爬虫和MySQL数据库的知识,请随时探索网络上的资源或咨询专业人士。祝你在编程的道路上一帆风顺!
标签:ratings,python,movie,数据库,MySQL,电影,评分,mysql From: https://blog.51cto.com/u_16175435/6738376