| 赞 | 76 |
| VIP | |
| 好人卡 | |
| 积分 | 147 |
| 经验 | |
| 最后登录 | 2025-12-9 |
| 在线时间 | 2175 小时 |
- 梦石
- 0
- 星屑
- 14720
- 在线时间
- 2175 小时
- 注册时间
- 2016-9-20
- 回帖
- 777
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 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需要每个网页都进行制定匹配方案, 要自行分析正规表达式结构,再通过比较 找出合适方案 (有些网页特征码比较少就比较难弄?)
这里用环球网进行例字 (后来用环球网里的 子网页 更好 更小,不过不想改了,要试的话要自己更改)
[pre lang="ruby"]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.chomp! #!發生變化并返回
#$subject =~ /比特币价格<(\d+)/i #错误示范
#p $subject
loop do #由于是同一句中,因此需要反复执行,需检测同一句 (在低版本ruby貌似因没有scan方法(经人工智能询问))
#
# if ( line1 =~ /<a>(.*?)<b>/ ) #夹杂中的贪婪
$subject =~ /blank">(.*?)</ #非贪婪型重复 匹配"(.*?)"
#注不能以包括"/"衞号, 比如</a>是不行,所以以<
if ($~ !=nil) and ($~ != "") and ($1 != nil) #如果是nil(无) “”(空的字串)则不执行
p $1,$~ #if $1 !=nil #查看匹配结果
# line1.sub!(/blank">(.*?)</, "")
$subject.sub!(/blank">(.*?)</, "") #删除匹配的结果,以免下一次匹到相同无限循环
# a = $subject
#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[/pre]
@有丘直方
老贴[已经过期] 如何利用网頁讀取簡單的文本 , 用RM打开网頁 https://rpg.blue/thread-409865-1-1.html
[fold=下载url脚本(记得是谁给我了,详找老贴子: )][pre lang="ruby"] def url_data(url)##下載功能
# url_data("http://947532.ichengyun.net/bbs/1.png")#其他地方下載print(etc
api = Win32API.new('Urlmon', 'URLDownloadToCacheFile', 'ippiii', 'i')
buf = "\0" * 1024
if api.call(0, "#{url}?#{rand(10)}", buf, 1024, 0, 0) == 0
#不知为毛好多网页都不行, 大慨是编码不对? 好多网页数值不等于0 就获取不了
open(buf.sub(/\0+$/, ""), 'rb') { |f| f.read }.to_s
else
p "该网页不支持"
end
end[/pre][/fold]
|
|