qianshang666 发表于 2021-6-23 14:40

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.这个也不是我写的,是一位叫李如意的老师写的,我发这个帖子已经征得本人同意,希望大家如果转载的话,可以带上这个署名。

qianshang666 发表于 2021-6-23 19:02

hooing 发表于 2021-6-23 18:44
可不可以说一下使用场景?如果单纯是爬数据,python不能单独完成吗?FiddlerScript把目标URL的响应转发过来 ...

一些政府网站你想单纯的爬数据和单纯的扣代码不现实{:301_998:}

xinyangtuina 发表于 2022-11-29 17:47

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)

gunxsword 发表于 2021-6-23 14:59

感谢分享,虽然现在用不到,但是能用到的时候,会很方便!

莫凌 发表于 2021-6-23 15:09

大佬有没有fd抓会员书本内容的

qianshang666 发表于 2021-6-23 15:10

莫凌 发表于 2021-6-23 15:09
大佬有没有fd抓会员书本内容的

抱歉呀,这个我真没{:301_980:}

helian147 发表于 2021-6-23 15:55

本帖最后由 helian147 于 2021-6-23 16:51 编辑

李如意是知乎的那个吗?

哔哩哔哩奶提子 发表于 2021-6-23 17:01

按照使用方法python显示422 Unprocessable Entity{:301_977:}不懂因为啥原因

正己 发表于 2021-6-23 18:12

李如意老师很强的{:17_1068:}

hooing 发表于 2021-6-23 18:44

可不可以说一下使用场景?如果单纯是爬数据,python不能单独完成吗?FiddlerScript把目标URL的响应转发过来是基于什么考虑呢?是目标网站反爬太厉害吗?

qianshang666 发表于 2021-6-23 18:50

哔哩哔哩奶提子 发表于 2021-6-23 17:01
按照使用方法python显示422 Unprocessable Entity不懂因为啥原因

不应该呀,你可以发个具体问题截图我帮你看看

qianshang666 发表于 2021-6-23 18:52

正己 发表于 2021-6-23 18:12
李如意老师很强的

能和正己大佬五五开吗{:301_998:}
页: [1] 2 3
查看完整版本: FiddlerScript配合爬虫