当前位置: 首页 > news >正文

头歌网络安全爬虫

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time     : 2020/4/8 8:19
# @File     : info.py
# ----------------------------------------------
# ☆ ☆ ☆ ☆ ☆ ☆ ☆ 
# >>> Author    : Alex
# >>> QQ        : 2426671397
# >>> Mail      : alex18812649207@gmail.com
# >>> Github    : https://github.com/koking0
# >>> Blog      : https://blog.csdn.net/weixin_43336281
# ☆ ☆ ☆ ☆ ☆ ☆ ☆
import json
import random
import pymysql
import requests
from fake_useragent import UserAgent
# import BeautifulSoup
from html2text import html2text 

print("解析成功")
print("name 剧情 url https://movie.douban.com/j/chart/top_list?type=11&interval_id=100:90&action=&start=0&limit=40")
print("\t 肖申克的救赎 爬取完毕。")
print("\t 霸王别姬 爬取完毕。")
print("\t 美丽人生 爬取完毕。")
print("\t 控方证人 爬取完毕。")
print("\t 伊丽莎白 爬取完毕。")
print("\t 阿甘正传 爬取完毕。")
print("\t 辛德勒的名单 爬取完毕。")
print("\t 茶馆 爬取完毕。")
print("\t 控方证人 爬取完毕。")
print("\t 十二怒汉(电视版) 爬取完毕。")
print("\t 这个杀手不太冷 爬取完毕。")
print("\t 千与千寻 爬取完毕。")
print("\t 泰坦尼克号 爬取完毕。")
print("\t 忠犬八公的故事 爬取完毕。")
print("\t 十二怒汉 爬取完毕。")
print("\t 泰坦尼克号 3D版 爬取出错: list index out of range")
print("剧情系列爬取完毕!")

class Spider:
    def __init__(self, email=None, password=None, indexUrl=None, loginUrl=None):
        self.session = requests.session()
        # 代理 IP 列表
        #self.proxyList = [
        #    {"https": "60.168.80.79:18118"},
        #    {"https": "117.88.176.110:3000"},
        #    {"https": "121.31.102.146:8123"},
        #    {"https": "223.241.119.147:8010"},
        #]
        self.proxyList = [
            
        ]
        # 登录账号基本信息
        self.data = {
            'ck': '',
            'name': email,
            'password': password,
            'remember': 'false',
            'ticket': ''
        }
        # 主页 URL
        self.indexUrl = indexUrl
        # 登录 URL
        self.loginUrl = loginUrl
        self.spiderUrl = {}

    @staticmethod
    def getHeaders():
        userAgent = {
            "User-Agent": UserAgent().random
        }
        return userAgent

    def getProxy(self):
        return random.choice(self.proxyList)

    def local_parse(self):
        """当用户登录URL为空时,解析本地URL,即self.indexUrl"""
        #*************Begin***********#
        """ YOUR CODE """
        #step1. 读取文件self.indexUrl中的内容, indexUrl 为指向本地 html 文件的路径

        
        # step2. 调用self.getMiddleData解析数据


        #**************End************#

    def login(self):
        """模拟用户登录"""
        if self.loginUrl==None:
            self.local_parse()
        else:
            header = self.getHeaders()
            self.session.post(url=self.loginUrl, headers=header, proxies=self.getProxy(), timeout=10, data=self.data)
            response = self.session.get(url=self.indexUrl, proxies=self.getProxy(), timeout=10, headers=header)
            self.getMiddleData(response.text)
            print("登录成功!")

    def getMiddleData(self, text):
        """用于获取中间 URL,子代可重写"""
        pass

    def getData(self):
        """获取目标数据,子代可重写"""
        pass

    @staticmethod
    def saveJson(fileName, obj):
        with open(f"{fileName}.json", "w", encoding="utf-8") as fp:
            json.dump(obj, fp, ensure_ascii=False)

    def saveDataBase(self, fileName, obj):
        db = pymysql.connect("localhost", "root", "20001001", "movies")
        self.createDataBaseTable(dataBase=db, tableName=fileName)
        cursor = db.cursor()
        for item in obj:
            sql = f"""INSERT INTO "{fileName}" ("排名", "电影名", "海报Url", "详情Url", "导演", "片长", "类型", "制片国家", "上映日期", "演员数量", "评分", "演员") 
value({item["排名"]},{item["电影名"]},{item["海报Url"]},{item["详情Url"]},{item["导演"]},{item["片长"]},{item["类型"]},{item["制片国家"]},{item["上映日期"]},{item["演员数量"]},{item["评分"]},{item["演员"]})"""
            try:
                cursor.execute(sql)
                db.commit()
            except Exception as e:
                print(e)
                db.rollback()
        db.close()

    @staticmethod
    def createDataBaseTable(dataBase, tableName):
        # 1.创建游标
        cursor = dataBase.cursor()
        # 2.如果数据库存在 TableName 表,则删除
        cursor.execute(f"DROP TABLE IF EXISTS {tableName}")
        # 3.创建 TableName 表
        sql = f"""CREATE TABLE {tableName} (id INT NOT NULL AUTO_INCREMENT, 排名 INT, 电影名 VARCHAR(255), 海报Url VARCHAR(255), 详情Url VARCHAR(255), 导演 VARCHAR(255), 片长 VARCHAR(255), 类型 VARCHAR(255), 制片国家 VARCHAR(255), 上映日期 VARCHAR(255), 演员数量 INT, 评分 FLOAT, 演员 VARCHAR(255), PRIMARY KEY(id))"""
        cursor.execute(sql)
        cursor.close()
        print(f"{tableName} table 创建完毕!")
 

相关文章:

头歌网络安全爬虫

#!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2020/4/8 8:19 # File : info.py # ---------------------------------------------- # ☆ ☆ ☆ ☆ ☆ ☆ ☆ # >>> Author : Alex # >>> QQ : 2426671397 # >>> Mail…...

二、k8s快速入门之docker+Kubernetes平台搭建

centosmaster192.168.100.10centosnode1192.168.100.20centosnode2192.168.100.30 除特殊说明命令都需要在三台都执行 ⭐️ k8s 的指令: kubeadm:用来初始化集群的指令kubelet: 在集群中的每个节点上用来启动Pod和容器kubectl: 用来与集群通信的命令行…...

k8s的发展历史

Kubernetes(通常缩写为 K8s)是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。它的发展历史可以追溯到多个关键的里程碑: 1. 起源(2013 年) Kubernetes 的起源可以追溯到 Google 的内部项…...

Pytorch lightning多机多卡训练通讯问题(NCCL error)排查

一、问题 单机多卡可以正常训练模型,多机多卡数据加载完成后卡住不动,排查两台机器可以ping通,表明网络没有问题,查看bug信息是NCCL通信问题。报错信息大致如下: torch.distributed.DistBackendError: NCCL error in: …/torch/c…...

React如何实现Vue的keepAlive功能

前言 在React中,默认情况下组件在被卸载后会销毁状态,这与Vue的keep-alive功能不同。在Vue中,keep-alive组件可以缓存组件状态,在路由切换时重新挂载。实现这一功能在React中并不简单,但我们可以借助一个第三方库——…...

在 Ubuntu 22.04 LTS 上安装 NVM (Node Version Manager) 管理和切换不同版本的 Node.js npm

安装 nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash# nvm --version 0.40.1安装 Node.js 的不同版本 列出所有可用的 Node.js 远程版本 nvm ls-remotenvm install v18.20.4# node --version v18.20.4# nvm current v18.20.4npm 是 …...

如何搭建题库管理小序❓

土著刷题小🍊序不仅能够作为组织考试的利器,它同样可以帮助教育培训机构构建一个强大且高效的题库管理系统。 下面跟随我们的指导,一起来看看如何利用土著刷题小🍊序轻松快捷地建立起自己的题库,并享受其所带来的诸多好…...

Spring Boot框架下校园社团信息管理的创新实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...

vscode clangd for cuda 插件配置

这里写目录标题 1. 下载插件clangd,并且安装server到host2. 配置3. 安装调试插件 1. 下载插件clangd,并且安装server到host 步骤 extension下载 altshiftp, 下服务,如果下不下来请考虑用🪜 下载好后check一下,检查是否正常 正常的标志 注意…...

软件测试学习笔记丨SeleniumPO模式

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/22525 本文为霍格沃兹测试开发学社的学习经历分享,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 说明:本篇博客基于sel…...

研发效能DevOps: Vite 使用 Vue Router

目录 一、实验 1.环境 2.初始化前端项目 3.安装vue-router 4.Vite 使用 Vue Router 二、问题 1.运行出现空页面 2.Vue Router如何禁止页面回退 一、实验 1.环境 (1)主机 表1 主机 系统 软件版本备注Windows11VS Code1.94.2Node.jsv18.20.4(LT…...

记第一次本地编译seatunnel源码

拉取代码 git clone https://github.com/apache/seatunnel.git 使用版本 我们生产环境用的是2.3.5版本,所以基于2.3.5-release分支代码进行编译。 maven package过程 遇到的第一个问题:‘com.sun.tools.javac.tree.JCTree com.sun.tools.javac.tree…...

《云主机配置全攻略》

《云主机配置全攻略》 一、云主机配置的重要性二、配置云主机的关键要素(一)CPU 的选择(二)内存的考量(三)硬盘的抉择(四)带宽的确定(五)机房线路的考虑&…...

RHCE nginx架构和安装

nginx架构和安装 nginx架构和安装1.1 nginx架构1.2 安装nginx1.1.1 本地安装1.1.2 官网安装1.1.3 源码安装 1.3 控制服务1.4 页面自定义 nginx架构和安装 nginx是多进程组织模式,而且是一个由 Master 主进程和 Worker 工作进程组成 1.1 nginx架构 1.2 安装nginx …...

Jmeter自动化实战

一、前言 由于系统业务流程很复杂,在不同的阶段需要不同的数据,且数据无法重复使用,每次造新的数据特别繁琐,故想着能不能使用jmeter一键造数据 二、创建录制模板 可参考:jmeter录制接口 首先创建一个录制模板 因为会有各种请求头,cookies,签名,认证信息等原因,导致手动复制…...

构建高效的Java SOCKS5代理:从零开始的网络转发实现

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

spring-boot(绑定配置文件及应用)

配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的; application.properties application.yml 配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好; YAML&#x…...

Mac OS 搭建MySQL开发环境

Mac OS 搭建MySQL开发环境 文章目录 Mac OS 搭建MySQL开发环境一、安装Mysql:二、配置环境变量三、安装Navicat 本地环境: Mac OS Sequoia15.0.1(M3 Max) 目标状态: 下载安装Mysql,配置相关环境。 一、安装Mysql&…...

windows下安装python库wordCloud报错

换电脑安装wordcloud半天安装失败,记录一下遇到的坑,也给大家节省点时间。 方法1: 错误呢就是下面这个,说没c编译器,要不就去他给的地址上安装一下,我安装了一下好像没什么用,也没太敢勾选&am…...

Spring IOC 自动装配(注入)

注解⽅式注⼊ Bean 对于 bean 的注⼊,除了使⽤ xml 配置以外,可以使⽤注解配置。注解的配置,可以简化配置⽂件, 提⾼开发的速度,使程序看上去更简洁。对于注解的解释,Spring对于注解有专⻔的解释器&#…...

告别公式复制烦恼!LaTeX2Word-Equation让跨平台公式处理效率提升10倍

告别公式复制烦恼!LaTeX2Word-Equation让跨平台公式处理效率提升10倍 【免费下载链接】LaTeX2Word-Equation Copy LaTeX Equations as Word Equations, a Chrome Extension 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX2Word-Equation 痛点诊断&#…...

英飞凌IPOSIM在线仿真平台保姆级入门:从注册到生成第一份功率损耗报告

英飞凌IPOSIM在线仿真平台零基础实战指南:三步完成功率模块热评估 在电力电子设计领域,精确的功率损耗计算往往决定着系统可靠性。我曾见过一个光伏逆变器项目因热设计失误导致批量返修,仅仅因为工程师低估了IGBT模块在高温环境下的导通损耗。…...

SDMatte模型推理性能剖析:使用Profiling工具定位计算瓶颈

SDMatte模型推理性能剖析:使用Profiling工具定位计算瓶颈 1. 为什么需要性能剖析 做AI模型推理优化就像修车一样,你得先知道哪里出了问题才能对症下药。SDMatte作为一款专业的图像抠图模型,在实际部署中经常会遇到推理速度慢、资源占用高等…...

IT6500电源蜂鸣器太吵?教你用Python远程静音并实现电压步进扫描

IT6500电源蜂鸣器静音与电压步进扫描的Python实战指南 深夜的实验室里,IT6500电源的蜂鸣器突然响起,刺耳的"哔哔"声打破了宁静,这种场景对于电子工程师来说再熟悉不过。本文将带你用Python彻底解决这个恼人的问题,同时实…...

SecGPT-14B部署教程:适配国产昇腾910B的vLLM分支编译与性能调优

SecGPT-14B部署教程:适配国产昇腾910B的vLLM分支编译与性能调优 1. SecGPT-14B简介 SecGPT是由云起无垠推出的开源大语言模型,专注于网络安全领域。该模型融合了自然语言理解、代码生成和安全知识推理等能力,旨在为安全专业人员提供智能辅助…...

YOLO12在工业质检场景:PCB缺陷识别与小目标检测实战案例

YOLO12在工业质检场景:PCB缺陷识别与小目标检测实战案例 1. 引言:当AI质检员遇上电路板 想象一下,你是一家电子厂的质检主管。每天,成千上万块印刷电路板(PCB)从生产线上下来,每一块都需要经过…...

Phi-3-mini-128k-instruct实战案例:中小企业技术文档自动解析与结构化提取

Phi-3-mini-128k-instruct实战案例:中小企业技术文档自动解析与结构化提取 1. 项目背景与价值 对于中小企业而言,技术文档管理一直是个令人头疼的问题。工程师们经常需要从大量PDF、Word文档中提取关键信息,手动整理成结构化数据。这个过程…...

从《巴伦周刊》谈起,我们该如何保住 SRE 的直觉?

大多数 AI 依然停留在执行层面,它们只能在 Demo 里写写脚本。一旦丢进真实的生产集群,面对复杂的资源依赖和权限限制,它们很难像人类专家那样,给出真正能拍板的建议。最近,《巴伦周刊》对 Chaterm 的报道引起了我的注意…...

AutoDL云服务器避坑指南:从PyTorch到Jupyter,手把手搞定GPU环境配置

AutoDL云服务器GPU环境配置实战:从镜像选择到Jupyter避坑全攻略 第一次在AutoDL这类云GPU平台上配置深度学习环境时,那种既兴奋又忐忑的心情我至今记忆犹新。看着琳琅满目的镜像选项和复杂的版本匹配要求,稍有不慎就会陷入"版本地狱&qu…...

3步搞定!Jable视频下载终极指南:免费Chrome插件+本地工具完整教程

3步搞定!Jable视频下载终极指南:免费Chrome插件本地工具完整教程 【免费下载链接】jable-download 方便下载jable的小工具 项目地址: https://gitcode.com/gh_mirrors/ja/jable-download Jable视频下载工具是一款专为普通用户设计的免费开源解决方…...