网站内容自动更新(一个对服务器进行了什么?到底对什么了?)

优采云 发布时间: 2022-03-23 18:19

  网站内容自动更新(一个对服务器进行了什么?到底对什么了?)

  我们在写软件的时候,有时候因为其他地方的调整,以前的版本已经不适用了,重新发布再分享新软件的链接,对用户很不友好。这时候我们需要给老版本一个通道,让它能够检测到新版本并自动升级。

  

  当然,解决方案不是唯一的。我就是这样做的。每次打开软件,我都会访问一个特定的网站,然后获取它显示的内容。我们在那里发布更新版本。网站以上,当老软件获取到新软件的信息时,老软件提示有新软件升级,然后自动下载到指定目录。

  话不多说,工作。就个人而言,我经常将一些东西上传到蓝锁云。主要原因是它没有速度限制。您只需要获取蓝锁云的个人主页,即可查看发布了哪些内容。

  例如:

  

  软件旧版本名称为xxx.1.0,新版本名称为xxx.2.0。本页所有名称均通过旧软件提取。当使用@>0的版本时,提示用户有新的更新。

  

  url="https://vk666.lanzous.com/b00z8pwpg"headers={  'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/88.0.4324.96Safari/537.36Edg/88.0.705.56',   }<br /><br />res = requests.get(url,headers=headers)r=res.text<br />import re#用正则表达式,把后面的版本号提取出来pattern1=re.compile('var (.+?);')

  现在提示的内容已经有了,剩下的就是自动下载了。以兰宗云为例。

  如何获取软件名称对应的下载链接?

  右击你要获取链接的软件名称,然后点击勾选查看其对应的html内容,在标签的href下找到下载链接

  

  这个想法就出来了,我们直接用

  res = requests.get(url,headers=headers)print(res.text)

  这样就得到了页面的html文本,最后通过各种解析方法从html中提取出对应的链接。但是仔细看,当我们刷新网页的时候,这里的div标签和head都在闪烁,说明填充了新的内容。

  

  这是什么意思?这个网页不是静态网页,而是根据js动态渲染的网页。如果爬取静态内容,肯定得不到想要的信息。

  这时候可以抓包看一下浏览器对服务器做了什么来显示这些动态内容?打开网络,找到了这个信息,经过一步步排查,发现了这样一个帖子包。

  

  查看它的响应内容,我们找到了我们正在寻找的内容。

  

  是一个json格式的数据,收录id、name等,浏览器把这个包提交给服务器,服务器返回我们想要的信息。这时,我想到了用一个程序来模拟这种方法。在模拟之前,您需要查看发送的具体内容。

  

  不断刷新后,发现只有t和k在不断变化。这个 t 乍一看是一个时间戳,只剩下 k 没有 t。在网络页面下,Ctrl+f全局搜索k的值,看它在哪个文件中,出现过一次。终于在这个包里找到了。

  

  k的值是从这个包的返回值中解析出来的,然后作为数据提交给

  你可以得到你想要的信息。

  url="https://vk666.lanzous.com/b00z8pwpg"headers={ 'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/88.0.4324.96Safari/537.36Edg/88.0.705.56', }<br /><br />res = requests.get(url,headers=headers)r=res.text<br />import repattern1=re.compile('var (.+?);')t=pattern1.findall(r)[3]k=pattern1.findall(r)[4]k=k.split("'")[1].split("'")[0]t=t.split("'")[1].split("'")[0]<br />data={ 'lx':'2', 'fid':'1387166', 'uid':'1215702', 'pg':'1', 'rep':'0', 't':t, 'k':k, 'up':'1', }url='https://vk666.lanzous.com/filemoreajax.php'res = requests.post(url,headers=headers,data=data)data=res.json()data=data['text']<br />

  注意这里的t也必须是从这个包中得到的t值,是服务器当时的时间戳,而不是本地的时间戳。

  点击详细页面,发现每个文件的下载链接为:+一组数字。而这组数字就是之前得到的id。

  

  问题又来了,这个普通的下载按钮下的链接才是真正的下载链接,怎么弄,老方法,刷新,发现是html动态加载的,抓包。真正的下载地址在这里。

  

  

  这又是旧的发帖方法。找到后即可获取需要提交的数据。

  和上一个方法完全一样,这里不再赘述。

  完整代码

<p>import timeimport requestsfrom parsel import Selectordef get_update(): url="https://vk666.lanzous.com/b00z8pwpg" headers={ 'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/88.0.4324.96Safari/537.36Edg/88.0.705.56', }<br /><br /> res = requests.get(url,headers=headers) r=res.text<br /> import re pattern1=re.compile('var (.+?);') t=pattern1.findall(r)[3] k=pattern1.findall(r)[4] k=k.split("'")[1].split("'")[0] t=t.split("'")[1].split("'")[0]<br /> data={ 'lx':'2', 'fid':'1387166', 'uid':'1215702', 'pg':'1', 'rep':'0', 't':t, 'k':k, 'up':'1', } url='https://vk666.lanzous.com/filemoreajax.php' res = requests.post(url,headers=headers,data=data) data=res.json() data=data['text'] name_data={} size_data={} url_2='https://lanzous.com/' name_list=name_data.keys() for i in data : name_data[i['name_all']]=url_2+i['id'] size_data[i['name_all']]=i['size'] for i in name_list: num=re.sub("\D", "", i) if num >'30': url=name_data[i] res=requests.get(url,headers=headers) data=res.text rep=Selector(data) texts=rep.css("iframe[src*='/']::attr(src)").extract()[0] texts=url_2+texts.split('/')[1] res=requests.get(texts,headers=headers) pattern2=re.compile("(?

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线