加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 ppspssss 于 2025-4-19 20:49 编辑
草稿
关于以前的天气贴子:(天气api) 娯乐用 自动检测所在地区天气(使用论譠网友提供的api)
https://rpg.blue/forum.php?mod=viewthread&tid=484877
几年以前问论坛的人获取的下载网页源代码方法URLDownloadToCacheFile Win32api (仅限windows使用)
是类似爬虫的方法 ? , 好像不算爬虫,这里贴子 -- 只是娱乐用 ,所以获取一些标题就行 而不用些网页api接口直接用获取网页,由于不是api接口好像获取内容的没什么特征码就是不能只是新闻标题,全夹杂类信息
以匹配表达式获取新稿标题
我在想如果游戏里获取新的资讯,打开游戏时加载网页 ,在游戏里比如告示板之类的写出来,感觉像只打开游戏也不会错过些新闻(我猜)
想了一种是天气,一种是新闻,是每天都有新的内容, 网站又多适合啥游戏都张贴公示
此次难度较大不是用api获取,要在同一句中重复匹配,
注:加载时网站:
1 生成的记事本txt大小需要尽量小,访问网站速度要尽量快(不同地区不同),时间大于10秒会脚本被备份,比如南方网 350kb ,环球网 110kb 都是合格,环球网更小加载更快(省流),如果访问该网页网速要在50kb/s的话则需要500kb大小以下,
(有子连结进入后更小只有10kb大小 南方网也有子连结44kb大小) , 也有些网页可能几mb大小就太大基本加载不了
2 网站需能正常获取文本到txt里,有些网站更是无法通过源代码获取文本 ,这种情况就需找其他网页
3需要每个网页都进行制定匹配方案, 要自行分析正规表达式结构,再通过比较 找出合适方案 (有些网页特征码比较少就比较难弄?)
这里用环球网进行例字 (后来用环球网里的 子网页 更好 更小,不过不想改了,要试的话要自己更改)
module BBwin def self.获取新闻网页源代码 # #a = url_data("https://price.btcfans.com/") #网页例子 a = url_data("https://www.southcn.com/") #环球网地址,可自行替换 f = File.open("新闻源代码.txt","w+") #a+意思:讀取,写入,覆盖原文件,文件不存在自动创建 #p a f.write(a) #写入a的内容文件 f.close #文件关闭 end #def def self.获取新闻 # #f = File.open("网页源代码.txt","w+") @第几天 = 0 @第几天文字 = "" @周几 = "" @总数 ="" @行数 = 0 $subject=[] $subject = File.readlines("新闻源代码.txt")#$subject等于行里所有行数 #p $subject.size for i in 0...$subject.size #遍历所有行数 $subject[i].chomp! #!發生變化并返回 #$subject[i] =~ /比特币价格<(\d+)/i #错误示范 #p $subject[i] loop do #由于是同一句中,因此需要反复执行,需检测同一句 (在低版本ruby貌似因没有scan方法(经人工智能询问)) # # if ( line1 =~ /<a>(.*?)<b>/ ) #夹杂中的贪婪 $subject[i] =~ /blank">(.*?)</ #非贪婪型重复 匹配"(.*?)" #注不能以包括"/"衞号, 比如</a>是不行,所以以< if ($~ !=nil) and ($~ != "") and ($1 != nil) #如果是nil(无) “”(空的字串)则不执行 p $1,$~ #if $1 !=nil #查看匹配结果 # line1.sub!(/blank">(.*?)</, "") $subject[i].sub!(/blank">(.*?)</, "") #删除匹配的结果,以免下一次匹到相同无限循环 # a = $subject[i] #b = a.sub!(/ .*?target="_blank">/, "") #1 #分别删除前的 bababa...查看天气详情"> #if b == nil #p "nil!!!",@行数 #next #end # c = b.sub!(/<.*?\/a>/, "") #1 #删除后的 <bababa.../a> #这里是匹配天气预报不是第几天 #@总数 += c #@行数 += 1 # p c elsif ($~ ==nil ) #如果匹不到就跳出循环进入下一句而不是同一句(跳出loop do) break # loop do for #跳出循环loop do end #if end #loop do for #p c1 end #for i #p @总数 #f = File.open("test.txt","w+") #f.write(a) #f.close end #def end #module
module BBwin
def self.获取新闻网页源代码 #
#a = url_data("https://price.btcfans.com/") #网页例子
a = url_data("https://www.southcn.com/") #环球网地址,可自行替换
f = File.open("新闻源代码.txt","w+") #a+意思:讀取,写入,覆盖原文件,文件不存在自动创建
#p a
f.write(a) #写入a的内容文件
f.close #文件关闭
end #def
def self.获取新闻 #
#f = File.open("网页源代码.txt","w+")
@第几天 = 0
@第几天文字 = ""
@周几 = ""
@总数 =""
@行数 = 0
$subject=[]
$subject = File.readlines("新闻源代码.txt")#$subject等于行里所有行数
#p $subject.size
for i in 0...$subject.size #遍历所有行数
$subject[i].chomp! #!發生變化并返回
#$subject[i] =~ /比特币价格<(\d+)/i #错误示范
#p $subject[i]
loop do #由于是同一句中,因此需要反复执行,需检测同一句 (在低版本ruby貌似因没有scan方法(经人工智能询问))
#
# if ( line1 =~ /<a>(.*?)<b>/ ) #夹杂中的贪婪
$subject[i] =~ /blank">(.*?)</ #非贪婪型重复 匹配"(.*?)"
#注不能以包括"/"衞号, 比如</a>是不行,所以以<
if ($~ !=nil) and ($~ != "") and ($1 != nil) #如果是nil(无) “”(空的字串)则不执行
p $1,$~ #if $1 !=nil #查看匹配结果
# line1.sub!(/blank">(.*?)</, "")
$subject[i].sub!(/blank">(.*?)</, "") #删除匹配的结果,以免下一次匹到相同无限循环
# a = $subject[i]
#b = a.sub!(/ .*?target="_blank">/, "") #1 #分别删除前的 bababa...查看天气详情">
#if b == nil
#p "nil!!!",@行数
#next
#end
# c = b.sub!(/<.*?\/a>/, "") #1 #删除后的 <bababa.../a> #这里是匹配天气预报不是第几天
#@总数 += c
#@行数 += 1
# p c
elsif ($~ ==nil ) #如果匹不到就跳出循环进入下一句而不是同一句(跳出loop do)
break # loop do for #跳出循环loop do
end #if
end #loop do for
#p c1
end #for i
#p @总数
#f = File.open("test.txt","w+")
#f.write(a)
#f.close
end #def
end #module
@有丘直方
老贴[已经过期] 如何利用网頁讀取簡單的文本 , 用RM打开网頁 https://rpg.blue/thread-409865-1-1.html
下载url脚本(记得是谁给我了,详找老贴子: )
|