Pymysql将爬取到的信息存储到数据库中

2024-02-01 20:20

本文主要是介绍Pymysql将爬取到的信息存储到数据库中,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

爬取平台为电影天堂

获取到的数据仅为测试学习而用

爬取内容为电影名和电影的下载地址

创建表时需要建立三个字段即可

import urllib.request
import re
import pymysqldef film_exists(film_name, film_link):"""判断插入的数据是否已经存在"""sql = "select id from movie_link where film_name=%s and film_link=%s limit 1"result_num = my_cur.execute(sql, [film_name, film_link])# 使用sql语句查询获取到的电影名和下载地址,如果查询到有一条数据就表示数据已经存在,返回Trueif result_num:return Trueelse:return Falsedef create_date_table():"""创建数据库和数据表"""# 查看数据库是否存在,存在不创建,继续创建数据表。不存在创建,并创建表。exits = my_cur.execute("SHOW DATABASES LIKE 'movie_db';")if not exits:my_cur.execute("create database movie_db charset=utf8;")print("数据库建立成功")my_cur.execute("use movie_db;")my_cur.execute("""create table if not exists movie_link(id int(11) primary key auto_increment,film_name varchar(255) not null,film_link varchar(255) not null)charset=utf8;""")print("数据表建立成功")else:print("数据库已经存在,继续创建数据表")my_cur.execute("use movie_db;")my_cur.execute("""create table if not exists movie_link(id int(11) primary key auto_increment,film_name varchar(255) not null,film_link varchar(255) not null)charset=utf8;""")print("数据表建立成功")def add_films(film_name, film_link):"""向数据表中插入数据"""sql = "insert into movie_link values (null,%s,%s);"result_insert = my_cur.execute(sql, [film_name, film_link])# 如果插入成功返回值应该为影响的行数,不为零就代表插入成功if result_insert:print("插入成功:", film_name)def down_view():# 打开网页respon_data = urllib.request.urlopen("https://dy2018.com/0/")# 解码respon_decode = respon_data.read().decode("gbk")# 正则表达式获取下载页面网址films_data = re.findall(r"<a href=\"(.*)\" class=\"ulink\" title=\"(.*)\">", respon_decode)# 创建字典存储当前页的电影名和下载页面网址films_dict = {}count = 1# 将电影名和下载页网址从列表中拆包for films_url, films_name in films_data:# 拼接下载页面网站films_url = "https://www.dy2018.com/" + films_url# 打开下载页面respon_films_data = urllib.request.urlopen(films_url)# 解码respon_deown = respon_films_data.read().decode("gbk")# 使用正则提取下载地址down_url = re.search(r">(magnet:.*\.mp4)</a>", respon_deown)# 将电影名和下载地址存入字典films_dict[films_name] = down_url.group(1)print("已爬取第%s个资源" % count)count += 1return films_dictdef main():# 爬取信息并用字典介接收down_dict = down_view()# 创建数据库和数据表create_date_table()my_cur.execute("use movie_db;")# 将字典中的数据遍历取出,进行判断、添加for film_name, film_link in down_dict.items():if film_exists(film_name, film_link):print("电影[%s]保存失败" % film_name)continueadd_films(film_name, film_link)if __name__ == '__main__':# 建立连接my_sql = pymysql.connect(host="localhost", user="root", password="123456")# 创建游标对象my_cur = my_sql.cursor()main()# 一定要提交,否则数据不会被保存my_sql.commit()my_cur.close()my_sql.close()

将数据库中的数据当作固定页面返回

import socket
import pymysqldef request_headler(new_client_socket, ip_port):request_data = new_client_socket.recv(1024).decode()# 接收客户端浏览器发送的请求# 判断协议是否为空if not request_data:print("%s用户已下线" % str(ip_port))new_client_socket.close()return# 拼接响应的报文# 响应行respon_line = "HTTP/1.1 200 OK\r\n"# 响应头respon_header = "Server:Python\r\n"respon_header += "Content-Type:text/html; charset=utf-8\r\n"# 响应空行respon_blank = "\r\n"# 响应主体respon_body=""result = my_cur.execute("select * from movie_link;")result_data = my_cur.fetchall()for data in result_data:respon_body += ("%s、%s   <a href=%s>%s</a><br>" % (data[0], data[1], data[2],data[2]))# 发送响应报文respon_data = (respon_line + respon_header + respon_blank + respon_body).encode()new_client_socket.send(respon_data)def main():# 创建套接字tcp_sderver_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置端口重用、tcp_sderver_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)# 绑定端口tcp_sderver_socket.bind(("", 8080))# 设置监听,让套接字由主动变为被动接收tcp_sderver_socket.listen(128)# 接受客户端的请求  定义函数request_handler()while True:new_client_socket, ip_port = tcp_sderver_socket.accept()print("新用户%s来了" % str(ip_port))request_headler(new_client_socket, ip_port)# 关闭操作if __name__ == "__main__":my_db = pymysql.connect(host="localhost", user="root", password="123456", database="movie_db")my_cur = my_db.cursor()main()my_cur.close()my_db.close()

这篇关于Pymysql将爬取到的信息存储到数据库中的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668354

相关文章

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二