某游记网_sn算法分析

最近呢,有位小朋友说,他想搜集北京所有的景点信息,找来找去,找到某游记网站有大量的景点信息,想让我帮忙处理下。

3221c574a806453caf9b0dd5a80339b7.jpeg

一看景点信息确实不少,人工处理是不现实了,只能利用爬虫技术处理,首先抓个翻页包看看。

618fdb1c4bed95f37ac8dd89545bfca8.jpeg

抓包请求:https://www.mafengwo.cn/ajax/router.php

在请求体参数中,有两个验签的参数,_ts和_sn,从字段名看应该就是时间戳和sign。

打开开发者工具,下XHR断点,最后追溯到此处,index.js应该是生成签名的地方。

e8c616dc018b6d4b9853e7f47c7bd0ca.jpeg

一看代码是做了一定的混淆,字符串都没有直接显示,网上翻,找到此处。

2ac86e971000bee7f6ab5fb3e61b6120.jpeg

__Ox2133f变量是字符串数字,用AST还原字符串看看。

fc16b99a18f9dedf8d893e09dc2dbc3f.jpeg

还原以后,可以看到SparkMD5字样,看来签名跟md5有关,我们在回到签名算法的调用入口函数看看。

9a50c4708f80b2eeea802743c9459abb.jpeg

经过字符串还原,看起来清晰多了,从代码看_ts每次调用都会生成一个时间戳,_sn则是_0xe7fex35函数生成。

5d5329c6136fdece3de52386ac321baa.jpeg

跟进_0xe7fex35瞧瞧,看到最后一行,是经过排序的data加盐md5生成的。

总结:

整个签名流程下来,感觉蛮简单的,防护强度不高,可以完全还原算法的那种。


一起交流学习,QQ: NTQwMTExMDI5(base64)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是Python爬取携程游记分析数据的步骤: 1. 导入必要的库: ```python import requests from bs4 import BeautifulSoup import pandas as pd import jieba from collections import Counter from wordcloud import WordCloud import matplotlib.pyplot as plt ``` 2. 爬取携程游记页面: ```python url = 'https://you.ctrip.com/travels/' res = requests.get(url) soup = BeautifulSoup(res.text, 'html.parser') ``` 3. 获取所有游记的链接: ```python links = [] for i in soup.select('.journalslist li a'): links.append(i['href']) ``` 4. 定义函数获取单篇游记的数据: ```python def get_data(link): res = requests.get(link) soup = BeautifulSoup(res.text, 'html.parser') title = soup.select('.ctd_head h1')[0].text.strip() content = soup.select('#ctd_content')[0].text.strip() return title, content ``` 5. 循环爬取所有游记的数据: ```python data = [] for link in links: try: title, content = get_data(link) data.append([title, content]) except: continue ``` 6. 将数据换成DataFrame格式: ```python df = pd.DataFrame(data, columns=['Title', 'Content']) ``` 7. 分词并统计词频: ```python stop_words = ['的', '了', '是', '在', '都', '和', '就', '也', '有', '与', '为', '等', '这', '到', '从', '而', '及', '之', '不', '还', '但', '我们', '可以', '一个', '就是', '还是', '这个', '这些', '这样', '因为', '所以'] words = [] for content in df['Content']: words += [x for x in jieba.cut(content) if x not in stop_words] word_count = Counter(words) ``` 8. 生成词云图: ```python wc = WordCloud(background_color='white', width=1000, height=600, font_path='msyh.ttc') wc.generate_from_frequencies(word_count) plt.figure(figsize=(10,6)) plt.imshow(wc) plt.axis('off') plt.show() ``` 现在,你已经成功爬取了携程游记,并且对数据进行了简单的分析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值