FiddlerScript配合爬虫
本帖最后由 qianshang666 于 2021-6-23 14:43 编辑## 前言
想在这里给大家分享一个FiddlerScript配合爬虫的方法
## 工欲善其事,必先利其器
要准备Fiddler,这个大家随便百度一下就有
python环境,而且要会安装python库
## Fiddler准备
1.找到Fiddler中的FiddlerScript,会发现里面有很多代码,然后大家找到这个
2.点击一下就可以定位过去,然后把我下面发的代码复制在这里,效果就是这样的。
3.FiddlerScript代码
```
//过滤无关请求,只关注特定请求
if (oSession.fullUrl.Contains("www.kancloud.cn/cyyspring/test"))
{
var html = oSession.GetResponseBodyAsString()
if(html.Contains("href")){
//数据统计开始:把内容通过ajax http发送其它地方
var _xhr = new ActiveXObject('Microsoft.XMLHTTP');
var url = 'http://127.0.0.1:8000/sendData';
//发送的数据参数
var jsonString = oSession.GetResponseBodyAsString();
var requestHeaders = oSession.oRequest.headers.ToString();
var responseHeaders=oSession.oResponse.headers.ToString();
var str='{}';//构造自己的JSON http请求的信息及返回的结果
var data = Fiddler.WebFormats.JSON.JsonDecode(str);
data.JSONObject["requestHeaders"]=requestHeaders;
data.JSONObject["responseHeaders"]=responseHeaders;
data.JSONObject["responseBody"] = jsonString;
data.JSONObject["url"] = oSession.fullUrl;
data.JSONObject["response_code"] = oSession.responseCode;
jsonString = Fiddler.WebFormats.JSON.JsonEncode(data.JSONObject)
FiddlerObject.log(jsonString);
_xhr.onreadystatechange=function(){
if (_xhr.readyState==4){
FiddlerObject.log(_xhr.responseText);
}
};
_xhr.open('POST', url, true);
_xhr.send(jsonString);
//----数据统计结束-----
}else{
// 弹窗报错
FiddlerObject.alert("抓取出错!");
} // if end
} // if controll end
```
## python代码
```
import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel
import time
class Item(BaseModel):
url:str
response_code:str
responseBody:str
requestHeaders:str
responseHeaders:str
requestCookie:str
responseCookie:str
app = FastAPI()
@app.post("/sendData")
async def post_info1(request_data:Item):
print("url:", request_data.url)
print("response_code:", request_data.response_code)
print("responseBody:", request_data.responseBody)
print('requestHeaders:',request_data.requestHeaders)
print('responseHeaders:',request_data.responseHeaders)
print('requestCookie:',request_data.requestCookie)
print('responseCookie:',request_data.responseCookie)
return 'ok'
if __name__ == '__main__':
uvicorn.run(app=app, host='127.0.0.1', port=8000)
```
学过Flask的兄弟们应该对这个并不陌生,其实就是在自己电脑上开了一个接收数据的端口
## 使用方法演示
### 演示的网站是中国裁判文书网
1.先运行python代码,如果显示下图这样,就证明端口开启了
2.接下来就是要修改一下FiddlerScript中两个地方,上面的红线处,替换为想要爬取信息的链接,只需要一部分即可,下面的红线处替换为返回值的一个参数即可
3.然后你点击想要的界面,就会发现需要的数据返回在了python运行框,剩下的大家应该就明白了吧。
## 最后
1.其实有些人觉得这个没什么用,这个我没办法反驳,知道该怎么用的人自然知道,而且这个不止能用于网页,APP也同样可以,如果你嫌手动麻烦的话,网页你可以直接用selenium来代替手点,APP的话可以写个按键精灵脚本。
2.这个也不是我写的,是一位叫李如意的老师写的,我发这个帖子已经征得本人同意,希望大家如果转载的话,可以带上这个署名。 hooing 发表于 2021-6-23 18:44
可不可以说一下使用场景?如果单纯是爬数据,python不能单独完成吗?FiddlerScript把目标URL的响应转发过来 ...
一些政府网站你想单纯的爬数据和单纯的扣代码不现实{:301_998:} xinyangtuina 发表于 2022-11-20 18:30
按教程配置的:
第1步端口开启和教程一样的
到加载网页时,
找到原因了,是fiddler 那边没有对应的cookie数据,所以ptyhon 这里要禁用掉。
class Item(BaseModel):
url:str
response_code:str
responseBody:str
requestHeaders:str
responseHeaders:str
# requestCookie:str
# responseCookie:str
app = FastAPI()
@app.post("/sendData")
async def post_info1(request_data:Item):
print("url:", request_data.url)
print("response_code:", request_data.response_code)
print("responseBody:", request_data.responseBody)
print('requestHeaders:', request_data.requestHeaders)
print('responseHeaders:', request_data.responseHeaders)
# print('requestCookie:', request_data.requestCookie)
# print('responseCookie:', request_data.responseCookie) 感谢分享,虽然现在用不到,但是能用到的时候,会很方便! 大佬有没有fd抓会员书本内容的 莫凌 发表于 2021-6-23 15:09
大佬有没有fd抓会员书本内容的
抱歉呀,这个我真没{:301_980:} 本帖最后由 helian147 于 2021-6-23 16:51 编辑
李如意是知乎的那个吗?
按照使用方法python显示422 Unprocessable Entity{:301_977:}不懂因为啥原因 李如意老师很强的{:17_1068:} 可不可以说一下使用场景?如果单纯是爬数据,python不能单独完成吗?FiddlerScript把目标URL的响应转发过来是基于什么考虑呢?是目标网站反爬太厉害吗? 哔哩哔哩奶提子 发表于 2021-6-23 17:01
按照使用方法python显示422 Unprocessable Entity不懂因为啥原因
不应该呀,你可以发个具体问题截图我帮你看看 正己 发表于 2021-6-23 18:12
李如意老师很强的
能和正己大佬五五开吗{:301_998:}