我是一个代码业余爱好,能力仅限于VBA的for next,if endif.
一直想学Python虫,买了几本书,看了要么犯困,要么看完鸭子听雷一样。
买的Python书籍
直到有一天急需取网上的Swift 系统的Swift code 银行数据。问公司IT部门,也没有人会Python虫。
我想到都说AI厉害,是不是可以......?
我借助AI(GPT国内套壳的3.5+文心一言)开始写Python虫代码,只在晚上加班时间,或者休息时间,用了8天搞到网上的Swift code 银行数据。下面是我从0到成功的过程:
1.安装Python 库不会,或者是不知道安装哪一个库,问AI
2.爬取核心代码不会,AI给我核心代码
3.我组合代码,封装函数,报错;找AI这个活老师
总之一句话,万事不决问AI老师....
在和AI各种对话,我快速的学会了书里和教学视频里的各种名词,对报错也不再迷茫,一般的报错知道根源是什么。
有人说我,这样子学习不如照着书本学习那么扎实;
我觉得,我不是学生不为了考试,我学习目的是解决问题!
不管猫道狗道,解决了问题才是好道!!!
唧唧歪歪一大片,总结起来就是AI真是好东西,绝对的改变人类的东西,人人都要会用AI
下面是我整合AI 的code,在Win10+Python 3.11.4+PyCharm 2023.2 (Community Edition)成功运行,运行前需要有D:\Swiftcode文件夹:
# 取得网页table内容def get_table_content(url): response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') tables = soup.find_all('table') table_content = [] for table in tables: for row in table.find_all('tr'): row_content = [] for cell in row.find_all(['th', 'td']): row_contentend(cell.text.strip()) table_contentend(row_content) return table_content# 取得下一级网页def get_next_net(url): response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') div_node = soup.find('div', class_='select-container') # ??? # 找到具有特定属性的HTML元素 options = soup.find_all('option') combined_list = [] for line in options: data = json.loads(line['data-data']) country = data['country'] # 取得里面的国家名称 text = country.replace(" ", "-") # 单词空格使用-代替 url1 = url + text + '/' # 组合下一级网页 combined_listend((url1,text)) return combined_list# 保存文件def save_file_excel(url,pagesmax,countryname): count = 1 while count <= pagesmax: #页数限制 if count == 1: table_content = get_table_content(url) else: table_content += get_table_content(url + 'page/' + str(count) +'/') count += 1 df = pd.DataFrame(table_content[1:], columns=table_content[0]) # 将数据保存到Excel文件 df.to_excel(f'D:\\Swiftcode\\{countryname}.xlsx', index=False, engine='openpyxl') print(f'表格内容已保存在D:\\Swiftcode\\{countryname}.xlsx文件中。')# 主执行程序#解析网址 /d/file/gt/2023-09/ugpucetbqmw 请求头信息模拟Chrome浏览器headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'}# 发送GET请求获取网页内容url = 'https://www.theswiftcodes/'url_next = get_next_net(url)#取得下级网页# 分别取出地址和国家名称for url, name in url_next: country_url = url country_name = name # 取得页数 response = requests.get(country_url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') # 定位到相应的元素 last_button = soup.find('a', string='Last »') if last_button is None: # print("没有找到 'Last ' 按钮") save_file_excel(country_url,1,country_name) else: # print("找到了 'Last ' 按钮") page_number = (last_button['href'].replace('/' + country_name.lower() +'/page/', ''))#取到页面,后面带/ page_number1 = int(page_number.replace('/', ''))#去掉页面后面/,取得页码 save_file_excel(country_url, page_number1, country_name)
在C#中,枚举(enum)是一种特殊的数据类型,用于定义一组命名的整数常量。
枚举类型 是声明一组命名常量 (值类型) 的非重复值类型。
每个枚举类型都有一个对应的整型类型,称为枚举类型的 基础类型 。 此基础类型必须能够表示枚举中定义的所有枚举器值。 枚举声明可以显式声明、、、、、或的基础类型 byte sbyte short ushort int uint long ulong 。 请注意, char 不能用作基础类型。 不显式声明基础类型的枚举声明具有基础类型 int 。
枚举提供了一种简单且易于理解的方式来表示有限的数据集合,例如一周的天数、颜色、状态等。WeekDays.Monday在引用一周中的某天时,其可读性比数字0 更易读。
枚举是直接在命名空间、类或结构中使用enum 关键字。所有常量名都可以在大括号内声明,并用逗号分隔。下面定义了工作日的枚举。
看枚举的位置:类内
看枚举的位置:命名空间内
枚举成员枚举类型声明的主体定义零个或多个枚举成员,这是枚举类型的命名常量。 两个枚举成员不能具有相同的名称
C#中枚举的基本语法:
enum EnumName { // 枚举常量列表 Constant1, Constant2, //... }
定义一个枚举代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EnumTpye{ internal class Program { enum WeekDays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday } static void Main(string[] args) { Console.WriteLine(WeekDays.Monday); } }}
WeekDays枚举在每行中声明成员,每行用逗号分隔。
枚举值如果未将值分配给枚举成员,则编译器将在默认情况下为每个成员分配整数值(从零开始)。枚举的第一个成员将为0,并且每个连续枚举成员的值将增加1。
枚举值和操作每个枚举类型都定义了一个不同的类型;显式 枚举转换 () 需要在枚举类型和整型之间进行转换,或在两个枚举类型之间进行转换。 枚举类型可以采用的值集不受其枚举成员限制。 特别是,枚举的基础类型的任何值都可以转换为枚举类型,并且是该枚举类型的非重复有效值。
枚举成员具有其包含枚举类型的类型 (除了其他枚举成员初始值设定项中:请参阅 枚举成员) 。 使用关联值在枚举类型中声明的枚举成员的值 E v 为 (E)v 。
可以在枚举类型的值上使用以下运算符: == 、 != 、、 < 、 > <= 、 >= (枚举比较运算符) 、binary + (加法运算符) 、二进制 - (减法运算符) 、、 (^ & | 枚举逻辑运算符) 、 (~ 按位求补运算符) 以及 ++ (-- 后缀增量和减量运算符以及前缀增量和减量运算符) 。
每个枚举类型都自动派生自类 System.Enum (后者反过来派生自 System.ValueType 和 object) 。 因此,此类的继承方法和属性可用于枚举类型的值。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EnumTpye{ internal class Program { enum WeekDays//星期 { Monday, // 0 Tuesday, // 1 Wednesday, // 2 Thursday, // 3 Friday, // 4 Saturday, // 5 Sunday // 6 } static void Main(string[] args) { Console.WriteLine(WeekDays.Monday); } }}
可以为枚举成员分配不同的值。枚举成员的默认值的更改将自动按顺序向其他成员分配增量值。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EnumTpye{ internal class Program { enum Categories//类别 { Electronics, // 0 Food, // 1 Automotive = 6, // 6 Arts, // 7 BeautyCare, // 8 Fashion // 9 } static void Main(string[] args) { Console.WriteLine(); } }}
可以为每个成员分配不同的值。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EnumTpye{ internal class Program { enum Categories//类别 { Electronics = 1, Food = 5, Automotive = 6, Arts = 10, BeautyCare = 11, Fashion = 15, WomanFashion = 15 } static void Main(string[] args) { Console.WriteLine(); } }}
枚举可以是任何数字数据类型,例如 byte,sbyte,short,ushort,int,uint,long 或 ulong。但是,枚举不能为字符串类型。
在 enum 名称后指定类型为:type。下面定义了字节 enum。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EnumTpye{ internal class Program { enum Categories: byte{ Electronics = 1, Food = 5, Automotive = 6, Arts = 10, BeautyCare = 11, Fashion = 15} static void Main(string[] args) { Console.WriteLine(); } }}使用枚举
示例代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EnumTpye{ internal class Program { enum WeekDays//星期 { Monday, // 0 Tuesday, // 1 Wednesday, // 2 Thursday, // 3 Friday, // 4 Saturday, // 5 Sunday // 6 } enum Categories//类别 { Electronics, // 0 Food, // 1 Automotive = 6, // 6 Arts, // 7 BeautyCare, // 8 Fashion // 9 } enum Categories2 { Electronics = 1, Food = 5, Automotive = 6, Arts = 10, BeautyCare = 11, Fashion = 15, WomanFashion = 15 } enum Colors//颜色 { Red = 1, Green = 2, Blue = 4 } enum Categories3 : byte { Electronics = 1, Food = 5, Automotive = 6, Arts = 10, BeautyCare = 11, Fashion = 15 }//一下为访问枚举 static void Main(string[] args) { Console.WriteLine(WeekDays.Monday); // 星期一 Console.WriteLine(WeekDays.Tuesday); // 星期二 Console.WriteLine(WeekDays.Wednesday); // 星期三 Console.WriteLine(WeekDays.Thursday); // 星期四 Console.WriteLine(WeekDays.Friday); // 星期五 Console.WriteLine(WeekDays.Saturday); // 星期六 Console.WriteLine(WeekDays.Sunday); // 星期日 } }}
访问枚举
枚举访问权限控制可以在枚举类型中定义访问修饰符(public、private、protected 或 internal)来控制枚举的可访问性。默认情况下,枚举是公共的(public)。
使用枚举时,可以直接使用枚举常量的名称来表示其值。
Days today = Days.Monday; Colors myColor = Colors.Red;
完整代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EnumTpye{ internal class Program { enum WeekDays//星期 { Monday, // 0 Tuesday, // 1 Wednesday, // 2 Thursday, // 3 Friday, // 4 Saturday, // 5 Sunday // 6 } enum Colors//颜色 { Red = 1, Green = 2, Blue = 4 } static void Main(string[] args) { WeekDays days=WeekDays.Monday; Colors myColor = Colors.Red; Console.WriteLine(days); Console.WriteLine(myColor); } }}
直接使用枚举常量的名称来表示其值
还可以将枚举与位运算结合使用,以处理多个枚举常量的组合。这是因为枚举常量在底层存储为整数值,所以可以使用位运算来执行按位操作
完整代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EnumTpye{ internal class Program { enum Permissions//权限枚举 { None = 0,//孔 Read = 1,//读 Write = 2,//写 Execute = 4//执行 } static void Main(string[] args) { Permissions permissions = Permissions.Read | Permissions.Write; if ((permissions & Permissions.Read) == Permissions.Read) { // 具有读取权限 } Console.WriteLine(permissions); } }}转换枚举
从枚举类型转换为其基础整数类型需要显式强制转换。
完整代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EnumTpye{ internal class Program { enum WeekDays//星期 { Monday, // 0 Tuesday, // 1 Wednesday, // 2 Thursday, // 3 Friday, // 4 Saturday, // 5 Sunday // 6 } static void Main(string[] args) { int day = (int)WeekDays.Friday; // 枚举到int的转换 Console.WriteLine(day); //输出:4 想想为啥会是4? var wd = (WeekDays)5; // 从int到枚举的转换 Console.WriteLine(wd);//输出:星期六 想想为啥会是星期六? } }}
显式枚举转换:
int a = 123;long b = a; int c = (int) b;
完整代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EnumTypeTransition{ internal class Program { static void Main(string[] args) { int a = 123; long b = a; // 从int到long的隐式转换 int c = (int)b; //从long到int的显式转换 Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c); } }}
隐式转换以下转换归类为隐式转换:
标识转换隐式数值转换隐式枚举转换隐式内插字符串转换隐式可为空转换Null 文本转换隐式引用转换装箱转换隐式动态转换隐式常量表达式转换用户定义的隐式转换匿名函数转换方法组转换太多了,不在列举,入门学习够用了。更多的知识,请参阅微软官方。
(本文参考“我的世界wiki百科”)
在开始之前请确保你拥有游戏内操作员(op)权限且世界开启了无敌模式(即“激活作弊”选项)
一、指令是什么,有什么用,怎么用
指令是为快速建造(fill)、传送(tp)、设置游戏模式(gamemode)、获得物品(give)、击杀实体(kill)、召唤实体(summon)等的快速使用(应用)所产生的,但并不是所有指令都有必要使用,因为它们的复杂程度不如直接通过正常方式完成,下面会进行举例。
指令的使用并没有多复杂,在聊天框中使用时需要在前加“/”,在命令方块时可省略。
二、指令中的代词
在我们生活中常常会运用“你、我、他”的代词,而在“我的世界”中使用的指令同样也是。我们可以用@s来代替“自己”,用@a来代替“所有玩家”,用@p来代替“最近的玩家”,用@r来代替“随机玩家”,用@e来代替“所有实体”。这个没有什么记忆方法,自己熟练了就行,但是毕竟有指令提示,实操的时候都有提示。
三、常见问题
1.提示“此世界未开启无敌模式”
如果你所使用的世界由自己创建,并且使用指令时提示“该世界未开启无敌模式”时请开启“激活作弊”即可解决。如果开启了仍不能解决或无法开启则代表该图禁止了指令的使用,同时你也不能通过管理员权限修改自己的游戏模式。
2.指令直接作为信息发送
在指令前加上“/”即可解决
3.提示“未知的指令”或“语法错误”
有多种可能:没有操作员权限、拼写错误、语法错误
四、常用指令举例
tp用于传送实体,一般在指令栏自带。
使用语法:
/tp somebody
(将自己)传送到某人
例如:/tp 1
/tp somebody1 somebody2
将1传送至2
例如:/tp 1 2
time很常用的指令,用于快速调节、查询时间
使用语法:/time set sometime
例如:
/time set day 时间调至天亮
/time set night 时间调至天黑
3.fill
快速填充方块
使用语法:/fill x1 y1 z1 x2 y2 z2 something(注:xyz均可用~代替,以为当前坐标)
例如:/fill ~ ~ ~ ~ ~ ~ lava 玩家(命令方块)填充岩浆
这个指令在很小范围的填充时不建议使用,没有必要。
4.give
给予物品
使用语法:/give somebody something number
例如/give @s command_block 64给予自己64个命令方块。
第二弹会补充常见指令
五.备注
以上的somebody指某人,number指数量,sometime指某时间
以上内容截止发稿日均正确,如确实存在遗漏的问题,望指教。