本帖最后由 欧阳锋没有疯 于 2019-4-13 23:25 编辑
项目地址:https://github.com/hfxjd9527/kaoyanbang
呐!标题党也不完全是有罪的。比如我,嘻嘻。
因为我超认真的在帮助单身狗(我也是)。不信你看:
清晰大图,就不发了,毕竟楼主也不是那种猥琐人不是
好了,言归正传,本帖就是针对考研帮某个神秘板块的爬虫。
主要知识点:
- fiddler抓包工具的使用
- 安卓模拟器的使用
- 分析接口
该接口最近一段时间想必不会换,如果不想要弄模拟器分析接口,直接复制代码也能运行。运行后MongoDB中就会保存大量单身男女的信息,等自己升职加薪以后......
嘻嘻,说不定还能成就一段姻缘。
关于抓包工具的使用,社区里大佬已经发过很多次了,请点:抓包工具,为所欲为?
安卓模拟器的使用,百度一大堆,这里主要讲下,安卓模拟器,安装后在设置里面,将网络设置成桥接模式,这样设置的目的就是要让安卓模拟器的数据经过fiddler抓包软件。
查看自己的网络:ipconfig
C:/Users/lee/AppData/Local/YNote/data/1725824530@qq.com/f2bcd94d08504455bad9bf89dc94ad34/clipboard.png
对手机的设置:
C:/Users/lee/AppData/Local/YNote/data/1725824530@qq.com/e8735cefde314e32aaf5f828176cf884/clipboard.png
长按wiredSSID
C:/Users/lee/AppData/Local/YNote/data/1725824530@qq.com/74384a7f3ad5433fa0cbc3beaaa4b5b2/clipboard.png
修改网络:
C:/Users/lee/AppData/Local/YNote/data/1725824530@qq.com/4f87e1d09204468482de9815ca873b5a/clipboard.png
设置代{过}{滤}理,安装SwitchyOmega插件,新建一个情景模式,代{过}{滤}理服务器填写本机,代{过}{滤}理端口填写在fiddler里设置的端口,然后点应用选项。
C:/Users/lee/AppData/Local/YNote/data/1725824530@qq.com/59655216c4384933ae535495d6d01543/clipboard.png
点一下小圆圈,点fiddler就启动了这个代{过}{滤}理。C:/Users/lee/AppData/Local/YNote/data/1725824530@qq.com/090d5492e9cb45849c5116f6227250e7/clipboard.png
启动代{过}{滤}理后,打开安卓模拟器,点进考研帮,找到对应的论坛,清理下fiddler,滑动论坛的帖子,就能看到抓包的结果。C:/Users/lee/AppData/Local/YNote/data/1725824530@qq.com/c1cb87b2949b40ef8f126f627db6eb98/clipboard.png
C:/Users/lee/AppData/Local/YNote/data/1725824530@qq.com/312c5a6e5cfe41ea8805d9dd5aa75dc9/clipboard.png
分析fiddler抓到的数据,可以很快找到数据接口,然后稍稍写下代码就可以将该板块的信息给抓下来了。
代码如下:
[Asm] 纯文本查看 复制代码 # -*- coding: utf-8 -*-
# [url=home.php?mod=space&uid=686208]@AuThor[/url] : frank_lee
import requests
import json
import pymongo
class Kaoyanbang():
def __init__(self):
self.conn = pymongo.MongoClient(host="localhost", port=27017)
self.db = self.conn['kaoyanbang']
def handle_requests(self, url):
headers = {
"Host": "mapi.kyboye.com",
"Connection": "Keep-Alive",
"Accept-Encoding": "gzip",
"KY-APPVER": "3.2.9",
"KY-APPCHG": "ky_kaoyan",
"KY-SPEID": "10081255",
"KY-APPTYPE": "2",
"KY-SCHID": "1000",
"KY-APPVERS": "86",
"KY-SYSVER": "5.1.1",
"KY-YEAR": "2020",
"KY-SYSDEV": "OPPO++OPPO+R11",
"KY-TOKEN": "316061c6cdcff2c9e411b96791a86042",
"KY-UUID": "f341f084e029c53543d3714555b2658c",
"User-Agent": "KaoYanBang AipBot/1.0 (KaoYanClub-Android/3.2.9; android/5.1.1; OPPO++OPPO+R11)",
}
response = requests.get(url, headers=headers)
return response
def handle_index(self):
for i in range(6):
url = "https://mapi.kyboye.com/club/thread/list?fid=136&type=1&typeid=0&skip=" + \
str(26 + i * 20) + "&psize=20"
response = self.handle_requests(url)
response_dict = json.loads(response.text)
for dataline in response_dict['res']['list']:
friends_info = {}
friends_info['uid'] = dataline['uid']
friends_info['uname'] = dataline['uname']
friends_info['title'] = dataline['title']
friends_info['icon'] = dataline['icon']
friends_info['content'] = dataline['content']
friends_info['pics'] = dataline['pics']
self.save_to_mongo(friends_info)
print(friends_info)
def save_to_mongo(self, result):
if self.db['friends'].insert(result):
print("保存成功")
if __name__ == '__main__':
k = Kaoyanbang()
k.handle_index()
C:/Users/lee/AppData/Local/YNote/data/1725824530@qq.com/01740816876d43008acf983109852ea7/clipboard.png
这是比较简单的抓取,后来我想能不能换下ip地址,毕竟这样直来直去的抓,如果有反爬机制,很容易被封,于是我看到了这个(https://github.com/Python3WebSpider/ProxyPool)。后来安装了大佬的ip代{过}{滤}理池后,
发现他的代{过}{滤}理也是通过抓取普通代{过}{滤}理网站的代{过}{滤}理然后自己封装一下,于是我自己也弄了个简易版ip池(https://github.com/hfxjd9527/ip_proxy_pool),这样自己在爬虫的时候就可以使用自己抓取的ip了。
美滋滋。
因为经常听到多线程,多进程,自己实现较少,然后复习了一下多进程,搞了一下多进程抓取。如果真的感兴趣,可以参考我的项目代码:通过多种方式爬取考研帮-玫瑰初相遇板块(https://github.com/hfxjd9527/kaoyanbang)
也可在论坛回复帖子。
以上,都不重要,重要的是如果你正单身,那么考研帮这个版块的名字叫做“玫瑰初相遇”,本想弄个gif演示,奈何发帖限制图片大小,所以点(https://github.com/hfxjd9527/kaoyanbang)就可以看到了。 |