FiddlerScript配合爬虫

qianshang6662021-6-2371

前言

想在这里给大家分享一个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 uvicornfrom fastapi import FastAPIfrom pydantic import BaseModelimport timeclass Item(BaseModel):    url:str    response_code:str    responseBody:str    requestHeaders:str    responseHeaders:str    requestCookie:str    responseCookie:strapp = 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.这个也不是我写的,是一位叫李如意的老师写的,我发这个帖子已经征得本人同意,希望大家如果转载的话,可以带上这个署名。

最新回复 (10)
  • 楼主qianshang6662021-6-23
    引用2
    hooing 发表于 2021-6-23 18:44
    可不可以说一下使用场景?如果单纯是爬数据,python不能单独完成吗?FiddlerScript把目标URL的响应转发过来 ...

    一些政府网站你想单纯的爬数据和单纯的扣代码不现实
  • 楼主qianshang6662021-6-23
    引用3
    哔哩哔哩奶提子 发表于 2021-6-23 17:01
    按照使用方法  python显示422 Unprocessable Entity不懂因为啥原因

    不应该呀,你可以发个具体问题截图我帮你看看
  • gunxsword2021-6-23
    引用4
    感谢分享,虽然现在用不到,但是能用到的时候,会很方便!
  • 莫凌2021-6-23
    引用5
    大佬有没有fd抓会员书本内容的
  • 楼主qianshang6662021-6-23
    引用6
    莫凌 发表于 2021-6-23 15:09
    大佬有没有fd抓会员书本内容的

    抱歉呀,这个我真没
  • helian1472021-6-23
    引用7
    李如意是知乎的那个吗?
  • 1562764492021-6-23
    引用8
    谢谢楼主分享
  • 按照使用方法  python显示422 Unprocessable Entity不懂因为啥原因
  • 正己2021-6-23
    引用10
    李如意老师很强的
  • hooing2021-6-23
    引用11
    可不可以说一下使用场景?如果单纯是爬数据,python不能单独完成吗?FiddlerScript把目标URL的响应转发过来是基于什么考虑呢?是目标网站反爬太厉害吗?
  • 游客
    12
返回