西区代码小仓库 - 2022年10月
type: channel
link: https://www.lisper517.top/2022/10/
description: lisper517的个人博客
items: 小米智能厨具的使用
items: 如何压缩图片
items: Samba, ftp与webdav
items: AX6S路由器固化SSH
items: 笔记本安装CentOS
items: Python，爬虫与深度学习（17）——电影的信息爬取、下载与处理（二）
items: Python，爬虫与深度学习（16）——电影的信息爬取、下载与处理（一）

小米智能厨具的使用
type: item
date: 2022-10-28T10:37:00+00:00
description: 步骤/目录： 1.厨具价格及购买 2.食品制作过程 3.通用食品制作过程本文首发于个人博客https://lisper517.top/index.php/archives/61/，转载请注明出处。本文的目的是探讨如何做一人份的饭。1.厨具价格及购买购买各种厨具。价格 名称 579 米家智能调压电压力锅5L（带米量杯，饭勺，汤勺） 189 米家智能小饭煲2（带米量杯，舀饭勺）在米家app中可以管理这些智能家居，在手机上进行预约、选择菜谱等，比如智能小饭煲也可用于煮鸡蛋。另外还有很多有意思的菜谱，可以说app构成了智能厨具60%的功能。唯一可惜的是不能自己创造菜谱，只能等官方发布。不仅小米推出了智能家居，其他品牌也有智能生态，但小米的比较全，虽然很多是贴牌的。2.食品制作过程（1）2022.10.28一块鸡胸肉切成丁、分作三份（一份约100g），鸡胸肉丁放入陶瓷碗中，两份冷冻、一份即食。鸡胸肉丁加入生抽、白醋、盐、鸡精，腌制半小时。用 米家智能小饭煲2 自带的米量杯量1平杯米，倒入饭煲内胆，自来水淘两次，加水到1.5杯线。米量杯量取1/4杯绿豆、1/4杯玉米渣，放入钢碗中浸泡半小时。取半颗土豆（约104g）切成粗丝、半根胡萝卜（约113g）切成片，迷你炒锅倒菜籽油，用木制勺子翻炒，加生抽、盐，炒至胡萝卜可用勺子稍用力扎透，将锅中的菜倒入饭煲。锅中倒油，用木制炒勺翻炒鸡胸肉，炒至失去肉色，倒入饭煲内。泡好的绿豆、玉米渣倒入饭煲内。在米家app中选择 精煮饭 ，耗时1h，等待。舀出饭后，加入三勺醪糟米。评价：一般。少量绿豆或玉米渣较硬，可能没有煮熟，下次可以搅拌一下，或者再加点水。3.通用食品制作过程单人做饭想节约时间，无非是做焖饭或者乱炖。（1）焖饭焖饭就是在电饭煲里，下面放生米，上面放菜，一同出锅。通用做法是加米，加调味料，菜肉切丁放入，加水至淹没菜肉。焖饭的教程有很多，这里就不献丑了。焖饭的缺点是菜还需要自己切成丁，不然容易煮不熟，但是切丁比较耗时；一些比较难熟的食材还需要提前炒熟。另外电饭煲要买大一点的，否则放不下。（2）乱炖这里着重讲一下乱炖，因为除了味道一般，基本没有缺点。笔者的通用做法是使用电压力锅一次做午饭、晚饭。将250g肉切一刀分成2块，加入两种非肉类食材（也基本不怎么切），加入通用调味料（3块冰糖或1勺白砂糖，半勺辣椒粉，2勺生抽，盐、料酒、醋、老抽、郫县豆瓣各1勺，如果有其他调味料可适量添加，如鸡精味精），加水到高出食材。然后用电饭煲做2顿米饭。这样做的优点是处理时间快，基本上15-20min就能做好2顿的菜（不切菜不仅因为懒，还因为电压力锅切菜后容易炖烂）；由于大部分盐都溶解在水里，盐也不会特别高；不需要植物油，非常健康（如果想补充油脂，可以买肉时带点肥的）；全程200℃以下水热，不会因焦糊产生致癌物。相比较而言，正常炒菜处理时间长，高油高盐，唯一的优点是味道可以，但如果不会炒菜则味道也好不到哪里去。（3）早饭使用智能家电还可以轻松做早饭。一般来说笔者推荐的搭配是蛋白质+主食+一种水果。最简单的蛋白质来源是鸡蛋，电饭煲可以在app中找到煮鸡蛋的菜谱。主食方面，如果想吃的丰富一点，可以在煮鸡蛋的同时在电饭煲里放支架，放上预制的冷冻包子、馒头等；笔者一般选择速食面包。水果，选择应季的便宜水果即可，比如香蕉、苹果、梨、草莓、蓝莓等，其中香蕉是最方便的。

如何压缩图片
type: item
date: 2022-10-19T03:38:00+00:00
description: 步骤/目录： 1.需求介绍 2.ffmpeg 3.tinypng 4.squoosh （1）Node.js （2）克隆仓库并安装运行 a.本地运行网页服务器 b.运行桌面版 c.squoosh-cli （3）squoosh的使用 5.修改vimg_processor_multi本文首发于个人博客https://lisper517.top/index.php/archives/60/，转载请注明出处。本文的目的是介绍一些图片压缩的工具和使用方法。本文写作日期为2022年10月19日。运行的平台为win10，编辑器为VS Code。1.需求介绍在处理前端时，常常需要放一些图片在网页中，但是一般素材图片占用空间都很大，直接放到网页上不太合适，如果有方法把图片压缩一下就very的nice。本文就介绍一些图片压缩的工具和方法。2.ffmpeg在之前的文章 Python，爬虫与深度学习（17）——电影的信息爬取、下载与处理（二） 中，笔者用python写了一个vimg_processor类，主要是用ffmpeg来获取图片/视频信息、压缩图片/视频。其中使用ffmpeg压缩图片的命令参考了 这篇文章 ，如下：'ffmpeg -i "{}" -vf palettegen=max_colors=256:stats_mode=single -y "{}"'.format(self.origin_abs_path, self.palette) 'ffmpeg -i "{}" -i "{}" -lavfi "[0][1:v] paletteuse" -pix_fmt "{}" -y "{}"'.format(self.origin_abs_path, self.palette, self.pix_fmt, self.temp_img) 'ffmpeg -i "{}" -vf scale={} -y "{}"'.format(self.temp_img, self.definition, self.compressed_abs_path)总的来说是使用调色板将原图使用的256色减少，然后根据调色板输出图片，最后再压缩图片尺寸。笔者其实不太了解ffmpeg，使用上面的命令，虽然图片占用空间能压缩到很小，但色彩减少导致肉眼能看出很多差距，比较明显的是在人像中，如果涂了口红，压缩后的图片会呈现一种灰红色的质感，这是无法接受的。经过一番寻找，笔者发现了其他压缩图片的方法，它们压缩图片的算法比较复杂，效果也远非简单的3句ffmpeg命令可比。3.tinypngTinyPNG 据说是一个久负盛名的图片压缩网站，可惜它的压缩算法没有开源。如果你只是想压缩几张图片，可以到它的网址 https://tinypng.com/ 手动上传图片，据说每天只能上传20张不超过5MB的图片；如果需要批量压缩图片，你可以到 https://tinypng.com/developers 填写姓名、邮箱申请一个API key（限制是每月只能压缩500张），然后使用python或者其他语言写一个客户端实现压缩脚本，可以参考 这个项目 。使用TinyPNG确实压缩效果不错，可惜源码不开源，而且能压缩的图片张数有限制（据说有方法开源绕开限制，参考 这篇文章 ，原理是tinypng服务器限制上传次数时用到了ip进行判断，所以在构造请求头时修改了ip）。综合考虑下来，笔者放弃了TinyPNG，毕竟万一哪天这类闭源工具开始收费就不太合适了。像TinyPNG这样的在线图片压缩网站还有很多，比如：https://tinyjpg.com/ （TinyPNG的系列网站）https://imagestool.com/zh_CN/compress-images.htmlhttps://squoosh.app/本文将重点介绍squoosh。4.squooshsquoosh 是google chrome labs推出的一款开源图片压缩工具，源码放到了github上： https://github.com/GoogleChromeLabs/squoosh ，这些源码主要是TypeScript、JavaScript写的，但是笔者希望用python调用这个图像压缩的工具，这需要一些技巧，下面以Win10为例讲解。（1）Node.js因为要用JavaScript，需要安装Node.js、npm。按照 runoob教程 ，进行如下操作：到 https://nodejs.org/zh-cn/download/ 下载对应的安装包，笔者选择的是14.15.1的64位Windows安装包（下载地址为 https://nodejs.org/dist/v14.15.1/node-v14.15.1-x64.msi ，因为在 这个问题 中提…

Samba, ftp与webdav
type: item
date: 2022-10-12T15:11:00+00:00
description: 步骤/目录： 0.Samba的陷阱 1.需求介绍 2.Samba与frp 3.ftp 4.webdav本文首发于个人博客https://lisper517.top/index.php/archives/59/，转载请注明出处。本文的目的是使用树莓派搭建可公网访问的NAS，并且比较Samba, ftp与webdav这三种方式的异同。本文实验日期为2022年10月11日。使用的是树莓派4B（内存8G版），系统为Pi OS 64位桌面版（2022年4月4日更新，镜像名 2022-04-04-raspios-bullseye-arm64.img ）。0.Samba的陷阱当你在windows中打开 我的电脑 ，此时打开的东西叫文件管理器（Windows Explorer）。从文件管理器向其它地方拷贝东西，WE会要求目标硬盘先创建一个同等大小的空镜像（内容全部为0的镜像），再填充数据；Samba会调用 ftruncate() 函数来创建，而该函数在FAT文件系统上运行奇慢，需要花很长时间才能创建好空白镜像，WE以为Samba卡死了，最终会返回0x8007003B错误（ 参考回答 ）。FAT文件系统创建空镜像这么慢，归根结底是不支持sparse file（稀疏文件），所以它创建空镜像时真的会在硬盘上挨个写入0；而支持sparse file的，直接指定空镜像文件的头尾区块、存在metadata中即可，不用管这些区块上原本是1还是0。在Samba的设置中有一项隐藏的默认值 strict allocate = no ，如果改成yes，当单个文件大小超过500MB，Samba自己就会要求先生成空镜像再填充数据（参考 wiki-Samba 的 SMB/SMB2 write activities 一节）。综上所述，不需要改Samba的配置，只要保证Samba挂载的不是FAT文件系统（exFAT、FAT32）而是ext4、NTFS就行了（ 参考回答 ）。先创建空镜像再写入，本意是好的，只是FAT执行坏了。1.需求介绍在之前 树莓派+Samba+frp搭建NAS（网络云存储） 一文中，曾介绍过使用Samba在局域网内搭建NAS，并且使用千兆路由器后达到了不错的内网分享速度。在那篇文章中还将samba使用的445端口通过frp映射到公网ip，试图在公网也能访问NAS，但实际上并没有成功。本文将再次尝试，并且除了Samba之外，还尝试使用ftp与webdav方式搭建。需要注意的是，文中提到的所有方法都是树莓派直连硬盘，也就是说用linux把硬盘分享为NAS；如果你用windows电脑直连硬盘分享NAS，本文可能帮不了你。最后，本文中使用的都是云服务器+frp，这样NAS的带宽会被严重限制为云服务器的带宽，有条件的建议还是用DDNS，见之前的文章 路由器与DDNS （如果你家用的是移动的宽带，也可以不用看那篇文章，就用云服务器+frp）。2.Samba与frp在之前的文章中，成功在树莓派上搭建了Samba，内网已经能流畅访问，千兆路由器下，文件读写最快能达到113MB/s，而机械硬盘的最高读写速度也才150MB/s左右，已经很不错了。后来试着用frp开放到公网，怀疑因为云服务器带宽不够（640KB/s），导致windows上连接超时。之后换用 3.75MB/s 的云服务器，还是无法连接，这时才怀疑是否操作有些问题。最终，通过一番寻找，笔者成功解决了Samba开放到外网、用windows连接的问题。这里就跳过Samba的搭建，直接讲如何配置frp，windows如何连接。云服务器、frps和frpc的其他配置见前文，frpc配置好后添加一个samba的映射即可：[samba] type = tcp local_ip = localhost local_port = 445 remote_port = 44500这里 remote_port 选择44500而不是445，主要是因为安全性。445端口本来就是windows用来共享文件夹的，据有些文章说以前 永恒之蓝 病毒针对445、139等端口搞了一些事情，导致现在445、139等端口被全网封禁（139、138、137也和文件共享有关，据说如果445走不通就会尝试这些端口）。所以现在映射445到服务器其他端口，你可以自己选一个大一点的，这里以44500为例。设置完frpc.ini后，在云服务器的防火墙中打开44500端口。到这里，其实已经可以连接到Samba了，mac、linux都可以指定端口号，在文件浏览器中输入 smb://云服务器ip或域名:44500/共享名 即可，然后输入用户名密码即可；linux用命令行挂载时，需要如下操作：apt install -y cifs-utils #CentOS把apt换成yum…

AX6S路由器固化SSH
type: item
date: 2022-10-11T09:33:00+00:00
description: 1.需求介绍 2.解锁SSH （1）降回开发版固件 （2）连接SSH 3.固化SSH （1）备份 Bdata 和 crash 分区 （2）修改 Bdata 和 crash （3）刷入 Bdata 和 crash （4）切换系统版本 （5）稳定版固件固化SSH 4.其他设置 附录：小米路由器修复工具的使用本文首发于个人博客https://lisper517.top/index.php/archives/58/，转载请注明出处。本文的目的是为小米AX6S路由器固化SSH，这样即使升级官方固件，SSH也会开放。本文实验日期2022年10月11日，电脑为windows10系统。1.需求介绍在之前 寝室多设备连接校园网的解决方案 一文中，曾经为小米路由器4C刷上原版openwrt固件（固件可以理解为操作系统），在路由器上运行脚本实现校园网自动拨号、保持连接。实际上，如果使用性能更好的路由器，刷上其他固件以后还能做很多其他事情，但这一切都要通过基础的SSH来进行；可是路由器刷上其他固件后，由于不如原厂固件贴合，常常有路由器重启、wifi信号弱等问题。综上，使用原厂固件，优点是系统稳定，缺点是没有打开SSH、自由度不高；使用其他固件可以打开SSH、得到更多功能，但缺点是不如原厂固件稳定、wifi信号差。所以，在使用原厂固件的情况下开启SSH功能，成为一个比较折衷的选择。本文的目的就是对AX6S路由器，在使用原厂固件时打开SSH功能，并且将SSH功能固化，即使原厂固件升级或者路由器重启时也保持SSH打开。操作步骤和工具完全参考了 这个项目 。该项目包含的文件可到原网页下载，或者使用 笔者的备份 进行下载。本文中不含图片，项目中的md文档包含图片，更加直观。另外需要说明的是，不同厂家或者不同型号的路由器，开启SSH的方法不尽相同，其他型号的路由器打开SSH不能完全使用本文的方法。2.解锁SSH对于小米AX6S路由器，一般是把原厂固件降回开发版固件（默认开启Telnet和SSH功能），然后用SN号计算出root密码，连接到SSH。（1）降回开发版固件浏览器进入AX6S主页：192.168.31.1，找到 常用设置 -> 系统状态 -> 升级检测 ，点击 手动升级 -> 选择文件 ，选择 miwifi_rb03_firmware_stable_1.2.7.bin 这个文件上传、开始升级。这个文件在 小米路由器官网 无法找到，因为现在AX6S和许多其他型号都不提供开发版固件下载（目前好像只有AX9000，就是售价1299￥的那款路由器提供开发版固件）。但是它的小米路由器修复工具挺不错的，救砖能力强大，建议下载一个，网址为 https://bigota.miwifi.com/xiaoqiang/tools/MIWIFIRepairTool.x86.zip 。升级过程中注意路由器不要断电了。升级的同时，到 root密码计算网站 ，输入AX6S下方标签贴的SN号（或者在路由器管理页面也可以看到），经过一定计算得出root密码（小米官方固件的开发版都可以这样得到root密码）。路由器升级完成后指示灯会重新变蓝，刷新一下 192.168.31.1 可以确认，管理密码是一样的，但是能看到背景里有水印：only for test。（2）连接SSH使用putty.exe，ip为 192.168.31.1 ，端口就是22，进行连接。但有时开发版也可能只开启了Telnet、未打开SSH，那么就需要用Telnet开启SSH。对于win10机器，在 windows设置 里搜索 启用或关闭windows功能 ，在下面的框中勾选 Telnet 客户端 后确定，这样就开启了Telnet功能。然后在cmd中输入 telnet 192.168.31.1 ，输入root和密码即可用telnet连接到AX6S。接下来进行如下操作以解锁SSH：nvram set telnet_en=1 nvram set ssh_en=1 nvram set uart_en=1 nvram set boot_wait=on nvram commit /etc/init.d/dropbear enable /etc/init.d/dropbear start再次使用putty连接AX6S的SSH，成功。至此，SSH解锁成功。为了让原厂固件升级后或路由器重启后SSH功能也保持开启，还需要进行一些额外操作。3.固化SSH以下的命令使用SSH或Telnet输入都可以。（1）备份 Bdata 和 crash 分区使用 cat /proc/mtd 查看 Bdata 和 crash 对应的dev名，笔者实验时分别为 mtd5 和 mtd7 。接下来使用如下命令备份它们：nanddump -f /tmp/Bdata_mt…

笔记本安装CentOS
type: item
date: 2022-10-08T03:28:00+00:00
description: 步骤/目录： 1.烧录镜像与安装界面 2.安装CentOS 3.初始化操作 （0）静态局域网IP （1）合盖设置 （2）基础设置 （3）ufw （4）lm_sensors与watchdog （5）安全性设置 （6）python3 （7）修改DNS （8）docker （9）其他本文首发于个人博客https://lisper517.top/index.php/archives/57/，转载请注明出处。本文的目的是在废旧笔记本上安装CentOS系统。相比于树莓派，好处是断电后的续航能力、自动关机，树莓派在这方面还是不够完美。本文实验日期为2022年10月6日，笔记本为2011年的上网本，cpu 1.66GHz，内存2G，硬盘250GB。之前装过 CentOS 8 桌面版，有点卡，这次选择 CentOS 7 无桌面版。提醒一下，如果想省心，最好安装Ubuntu。1.烧录镜像与安装界面到 阿里云镜像网站 下载CentOS镜像，笔者选择的是 http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/ 中 CentOS-7-x86_64-Everything-2009.iso 这个版本（用torrent下载最快，不要直接下载），用Everything版本实际安装的时候可以选择装多少工具。下载好镜像后用 Win32 Disk Imager 或者 Raspberry Pi Imager （这两个烧录工具的下载见 树莓派4B初始化 ）把镜像烧录到一张空白的sd卡上。笔记本插上sd卡开机，进入BIOS（笔者的笔记本是按F2），选择从sd卡引导开机（或者把sd卡引导开机的优先级调到最高），保存BIOS并退出、重启，直接选择 Install CentOS 7，等待一段时间后进入CentOS的安装界面。2.安装CentOS跟着引导一步步走即可安装成功：语言选择美式英语（也可以选简中），时区改到上海，更改键盘布局，安装介质就是本地的media，软件选择请自行选择（比如选择最简安装），分区时把以前装的系统覆盖掉、选择自动分区（你也可以根据自己的需要手动分区），打开有线、无线网络，开始安装。安装过程中可以设置一下root密码、创建一个系统用户。最后重启，再次进入BIOS，把sd卡引导调到后面。至此CentOS安装完成，重启后进入命令行界面。3.初始化操作安装完成后，用root身份登录，进行一些初始化操作。以下的项目为笔者的习惯，可自行修改。（0）静态局域网IP自带的vi和curl有时候不太好用，所以需要安装vim、wget：yum install -y vim wget然后登录路由器管理页面，把笔记本的有线、无线内网ip都设置成静态的。之后都用PuTTY以root身份远程登录笔记本，进行操作。（1）合盖设置这里参考了 这篇文章 。正常情况下，笔记本关上盖子后会休眠，但是也可以设置为仅仅锁定。vim /etc/systemd/logind.conf其中有一行： #HandleLidSwitch=suspend ，把它改为 HandleLidSwitch=lock ，然后保存设置：systemctl restart systemd-logind之后把笔记本合上屏幕也没关系。（2）基础设置passwd root #修改用户密码 passwd wuhuqifei yum install -y epel-releasewuhuqifei指刚才安装CentOS时创建的系统用户。现在apt和yum的源感觉都不用换了，yum可以自动寻找最快的源。epel-release提供了一些软件库，比如ufw在默认的库里就找不到，装上epel-release后就能找到。如果显示无法解析 mirrorlist.centos.org ，可以更换源（以 mirrors.aliyun.com 阿里源为例）：cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo_back curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo chmod 777 CentOS-Base.repo yum clean all yum makecache yum update（3）ufwufw是一个简化操作的防火墙（相较于iptables等防火墙的复杂语法）。yum install -y ufw ufw default deny ufw allow 22 ufw enable systemctl enable ufw systemctl start ufw systemctl restart…

Python，爬虫与深度学习（17）——电影的信息爬取、下载与处理（二）
type: item
date: 2022-10-05T07:42:00+00:00
description: 步骤/目录： 1.需求介绍 2.电影压缩 3.本地视频入库 4.ffmpeg加速 （1）显卡加速 （2）多电脑加速 5.ffmpeg常用命令本文首发于个人博客https://lisper517.top/index.php/archives/56/，转载请注明出处。本文的目的是在电影下载完成后，进行一些处理。本文写作日期为2022年10月5日。运行的平台为win10，编辑器为VS Code。1.需求介绍首先，现在电影占用的空间越来越大，对电影进行一定压缩有助于存储。其次，在之前mysql的movie表中，还有两列： downloaded 和 file_path ，这两列是用来判断一部电影是否被下载过的。所以目前的需求是对电影进行压缩，并进行入库。2.电影压缩这里使用ffmpeg，它是一个被广泛使用的处理音视频、图片的开源软件，比如格式工厂就是在内部调用ffmpeg转换格式的，暴风影音等也可以使用ffmpeg进行播放。这里是 ffmpeg的官网下载地址 ，但是官网只提供源码下载，你可以自行make编译，或者到 github网页 下载由热心网友为windows系统编译好的ffmpeg压缩包，下载并解压到合适的位置，然后把ffmpeg添加到路径（windows添加路径的方法请自行搜索）。最后在cmd中输入 ffmpeg -h ，成功显示帮助信息即可。在ffmpeg的bin文件夹中，除了最常用的ffmpeg，还有ffplay，用于播放；ffprobe，用于获取视频信息。写一个python脚本，目的是对一个文件夹下的视频文件进行压缩处理，脚本名为 vimg_processor.py ，内容如下：import os, time, json, subprocess, re, traceback from MyPythonLib import log as mylog CWD = os.getcwd() TEMP_DIR = os.path.join(CWD, 'temp') if not os.path.isdir(TEMP_DIR): os.mkdir(TEMP_DIR) #temp这个文件夹主要是在压缩图片时存放临时的调色板 log = mylog.get_logger(os.path.join(CWD, 'logs')) start_time = time.time() fail_msg_list = [] def get_suffix(file_name: str) -> str: '''返回文件后缀名。若文件无后缀名，返回空字符串。 :param file_name:文件名（可带完整路径） :return 大写的后缀名（不含 . ） ''' suffix = os.path.splitext(file_name) suffix = (suffix[-1].lstrip('.')).upper() return suffix def special_format(file_name: str) -> bool: '''判断文件是否特殊格式。 :rmvb格式必须指定输出为mp4，ts、mpg格式跳跃观看时卡顿严重，所以都应该输出为mp4格式。 :param file_name:文件名（可带完整路径） :return bool ''' videoSuffixSet = {"RMVB", "TS", "MPG"} judge = (False, True)[get_suffix(file_name) in videoSuffixSet] return judge def is_video(file_name: str) -> bool: '''根据后缀名判断文件是否视频。 :param file_name:文件名（可带完整路径） :return bool ''' videoSuffixSet = { "WMV", "ASF", "ASX", "RM", "RMVB", "MP4", "TS", "MPG", "3GP", "MOV", "M4V", "AVI", "MKV", "FIV", "VOB", "FLV", "MPEG", "ISO" } judge = (False, True)[get_suffix(file_name) in videoSuffixSet] return judge def is_img(file_name: str) -> bool: '''根据后缀名判断文件是否图片。 :param file_name:文件名（可带完整路径） :return bool ''' imgSuffixSet = {"JPG", "JPEG", "BMP", "PNG", "WEBP"} judge = (False, True)…

Python，爬虫与深度学习（16）——电影的信息爬取、下载与处理（一）
type: item
date: 2022-10-03T03:16:00+00:00
description: 步骤/目录： 1.需求介绍 2.准备工作 （0）安装python库 （1）创建scrapy项目 （2）创建并运行mysql （3）创建并运行redis （4）创建python自建库 a.log.py b.redis.py c.mysql.py d.interaction.py e.torrent_parser.py f.其他 3.scrapy项目的修改 （1）items.py （2）middlewares.py （3）pipelines.py （4）settings.py （5）爬虫 4.使用说明本文首发于个人博客https://lisper517.top/index.php/archives/55/，转载请注明出处。本文的目的是使用scrapy爬取电影的信息。本文写作日期为2022年10月3日。运行的平台为win10和树莓派，编辑器为VS Code。1.需求介绍在日常生活中，我们常常会想要看一些精彩的电影，但是看电影又比较费时间，所以最好能把电影信息爬取下来，通过一些方法筛选出想要的电影，再通过一些标准筛选出对应的磁力链接或其他下载链接，下载电影到本地，最后对本地存储的电影信息进行入库、对占用空间较大的电影进行压缩等。本文是系列文章的第一篇，目的是使用scrapy从电影信息网站上爬取数据。为了方便，本文选择了一个能同时提供电影磁链的网站，该网站提供了演员主页，收录了每位演员出演的电影。由于笔者挑选电影时有演员偏好，所以打算收藏喜欢的演员的主页，根据演员来挑选电影。2.准备工作（0）安装python库笔者也搞不太清楚需要哪些库了，不过推荐安装的有以下这些：Scrapy（python-scrapy）、requests（处理网络请求）、bs4（对响应内容进行解析）、pymysql（连接mysql数据库）、lxml（网页解析器）、cryptography（连接mysql时密码加密）、selenium（操控浏览器）、redis（python-redis）。如果后续运行时有些依赖的库没安装，请自行安装。（1）创建scrapy项目在爬取磁链时，这些数据是通过javascript动态生成的，所以这个项目就命名为javaspider。在win10电脑上的cmd中运行如下命令：D: cd D:\spiders\scrapy scrapy startproject javaspider scrapy genspider java（2）创建并运行mysql这里选择在树莓派上通过docker运行mysql，具体的操作步骤见 Python，爬虫与深度学习（10）——scrapy+mysql构建ipool 这篇文章。mysql中主要有两张表，movie和torrent，分别存储电影和磁链的信息。库、表的创建将使用python，这里不单独创建。（3）创建并运行redis这里还要使用到redis，因为一个演员不止出演一部电影，一部电影通常也不止一个tag，并且筛选磁链时还可能用到磁链中的文件（也是一对多的关系）。这种一对多、无重复的表用redis的集合比较容易实现，而用mysql这样的关系型数据库比较复杂。由于redis对内存的要求比较大，这里就在win10机器上运行docker-redis。在windows上安装docker（即安装docker-desktop）的方法见 Docker入门（一）。在win10上运行容器的过程是一样的，比如cmd执行如下命令：D: md D:\docker\redis\data\redis然后新建一个 D:\docker\redis\docker-compose.yml compose模板文件，写入以下内容：version: "3.9" services: redis: image: redis ports: - "56379:6379" volumes: - D:\docker\redis\data\redis:/data logging: driver: json-file restart: always 最后运行：cd D:\docker\redis docker-compose config docker-compose up成功运行redis。注意这种方法运行的redis是完全没有安全措施的，不要开放到外网了。另外，为了使用redis-cli，可以在wsl环境（如果你是按照 Docker入门（一） 的方法在win10上运行docker，应该清楚wsl是什么）里安装redis。在cmd中进行如下操作：wsl -d Ubuntu-20.04 #如果你也用的是Ubuntu-20.04的话 cd /mnt/d/docker/redis wget https://download.redis.io/releases/redis…