python爬虫——电影天堂电影

一、爬取目标网站数据,关键项不能少于5项。 

首先需导入requests、BeautifulSoup、xlwt、re第三方库

代码如下:

import requests
import re
import xlwt
from bs4 import BeautifulSoup

url = 'https://www.dygod.net/html/gndy/china/'
hd = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188'
}

def getmanget(linkurl):
    res = requests.get(linkurl, headers=hd)
    res.encoding = 'GBK'
    soup = BeautifulSoup(res.text, 'html.parser')
    ret = soup.find_all('a')
    for n in ret:
        if 'magnet' in str(n.string):
            return n.string
    return None

def saveExcel(worksheet, count, lst):
    for i in range(6):
        worksheet.write(count, i, lst[i])

count = 0
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('sheet1')

for i in range(2, 3):
    url = 'https://www.dygod.net/html/gndy/china/index_' + str(i) + '.html'
    res = requests.get(url, headers=hd)
    res.encoding = 'GBK'
    soup = BeautifulSoup(res.text, 'html.parser')
    ret = soup.find_all(class_='tbspan', style='margin-top:6px')
    for x in ret:
        info = []
        a_tags = x.find_all("a")
        info.append(a_tags[1].string)
        pat = re.compile(r'◎译  名(.*)\n')
        ret = re.findall(pat, str(x))
        for n in ret:
            n = n.replace(u'\u3000', u'')
            info.append(str(n).split('/')[0])

        pat = re.compile(r'◎年  代(.*)\n')
        ret = re.findall(pat, str(x))
        for n in ret:
            n = n.replace(u'\u3000', u'')
            info.append(str(n))

        pat = re.compile(r'◎产  地(.*)\n')
        ret = re.findall(pat, str(x))
        for n in ret:
            n = n.replace(u'\u3000', u'')
            info.append(str(n).split('/')[0])

        pat = re.compile(r'◎类  别(.*)\n')
        ret = re.findall(pat, str(x))
        for n in ret:
            n = n.replace(u'\u3000', u'')
            info.append(str(n).split('/')[0])

        linkurl = 'https://www.dygod.net/' + a_tags[1].get("href")
        manget = getmanget(linkurl)
        if manget:
            info.append(str(manget))
            saveExcel(worksheet, count, info)
            count += 1

workbook.save('movie.xls')
print(f"共爬取了 {count} 部电影")

运行结果:

6b725dcdd1844f18b6a434b1c50ec52c.png9f524a6c1d334bbeae96dd780b5e29ae.pnge93d73ca833c4597a9dc648f4c06832a.pngca1cf3cf34a14a5fb08782e867f1e7ac.pngc9463bfe80fb4163ae32c60ab09b04d1.png将爬取的电影存储在excel中:

1285d601fb4a46a59f8de3eb7585b5d9.png

 二、将以上代码存储在SQLite数据库中并可以进行增、删、改操作:

上述代码不变,只需增加以下代码

代码如下:

# 添加函数:从数据库中查询所有电影信息
def query_movies(conn):
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM movies")
    return cursor.fetchall()

# 添加函数:根据电影名称查询电影信息
def query_movie_by_name(conn, movie_name):
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM movies WHERE name LIKE ?", ('%' + movie_name + '%',))
    return cursor.fetchall()

# 添加函数:根据电影ID删除电影信息
def delete_movie_by_id(conn, movie_id):
    cursor = conn.cursor()
    cursor.execute("DELETE FROM movies WHERE id = ?", (movie_id,))
    conn.commit()

# 添加函数:根据电影ID更新电影信息
def update_movie_info(conn, movie_id, new_info):
    cursor = conn.cursor()
    cursor.execute("UPDATE movies SET name=?, translation=?, year=?, area=?, category=?, magnet=? WHERE id=?", new_info + (movie_id,))
    conn.commit()

# 示例:查询所有电影信息并打印
conn = sqlite3.connect('movie_database.db')
all_movies = query_movies(conn)
print("所有电影信息:")
for movie in all_movies:
    print(movie)

# 示例:根据电影名称查询电影信息并打印
search_name = "复仇"
movies_by_name = query_movie_by_name(conn, search_name)
print(f"电影名称中包含'{search_name}'的电影信息:")
for movie in movies_by_name:
    print(movie)

# 示例:删除电影信息并更新
delete_movie_id = 1  # 需要根据实际情况指定要删除的电影ID
delete_movie_by_id(conn, delete_movie_id)
print(f"删除电影ID为{delete_movie_id}的电影信息")

update_movie_id = 2  # 需要根据实际情况指定要更新的电影ID
new_movie_info = ("小龙女", "小龙女", "2022", "中国大陆", "爱情/奇幻/古装", "magent=新下载地址")  # 需要根据实际情况指定新的电影信息
update_movie_info(conn, update_movie_id, new_movie_info)
print(f"更新电影ID为{update_movie_id}的电影信息为:{new_movie_info}")

# 关闭数据库连接
conn.close()

运行结果如下:

c644acf237d84b4688b7dd8b96dddcef.png22f4bced67cd4e748cb4705ea5e404ce.png 

 扩展:将数据可视化展示

需导入pandas、matplotlib第三方库

代码如下:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

# 读取Excel文件并创建DataFrame
df = pd.read_excel('movie.xls')

# 设置中文字体
font = FontProperties(fname=r"C:\Windows\Fonts\simsun.ttc", size=14)

# 统计产地信息
area_counts = df[df.columns[2]].value_counts()

# 创建条形统计图
plt.figure(figsize=(10, 6))
area_counts.plot(kind='bar', color='skyblue', edgecolor='black')

# 设置图表标题和轴标签
plt.title('电影年代统计', fontproperties=font)
plt.xlabel('年代', fontproperties=font)
plt.ylabel('数量', fontproperties=font)

# 设置x轴刻度旋转
plt.xticks(rotation=45, fontproperties=font)

# 显示图表
plt.show()

运行结果如下:

f94908abf41249468ed93127153194bb.png

至此,项目结束

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值