V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Cheez
V2EX  ›  Python

为什么抓取知乎一直 MalformRequestException 错误?

  •  
  •   Cheez · 2018-07-30 19:10:58 +08:00 · 3759 次点击
    这是一个创建于 2312 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Headers = {
        'Cookie': '_xsrf=....; tgw_l7_route=...; q_c1=fa50f62d64a347e2b2219e99935d1b4c|1532941819000|1532941819000; _zap=d722d2c4-2d96-4e09-a147-74a2fa53894e; z_c0=2...', 
          "Content-Type": "application/json",
         'User-Agent': 'ZhihuHybrid com.zhihu.android/Futureve/5.21.2 Mozilla/5.0 (Linux; Android 5.1.1; SM-G925F Build/LMY48Z) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Safari/537.36', 
        'accept': 'application/json, text/plain, */*'
    
    }
    
    responsText=  requests.post('https://www.zhihu.com/api/v4/answers/425660092/voters',  {
    			"type":"up" },headers=Headers, timeout=8 ).text
    

    一直出现:

    {code:400,
    message:"请求错误",
    name:"MalformRequestException"}
    

    问题是我在 fiddler 抓到的就是这样的,一模一样....

    结果我加了一个:

    x-app-za:OS=Android&Release=5.1.1&Model=SM-G925F&VersionName=5.21.2&VersionCode=764&Product=com.zhihu.android&Width=1080&Height=1920&Installer=%E5%BA%94%E7%94%A8%E5%AE%9D-%E5%B9%BF%E5%91%8A&DeviceType=AndroidPhone&Brand=samsung&OperatorType=46000
    

    就可以了,问题是....我在 fiddler 抓到的完全不需要这个参数....

    15 条回复    2018-07-31 15:08:06 +08:00
    NotNil1
        1
    NotNil1  
       2018-07-30 19:18:54 +08:00
    反爬虫了解一下
    Cheez
        2
    Cheez  
    OP
       2018-07-30 19:20:25 +08:00
    @ljtletters #1 问题是所有参数全部一样啊,一个在模拟器里面,一个用脚本跑而已.....知乎怎么反...
    maemual
        3
    maemual  
       2018-07-30 19:44:06 +08:00 via iPhone
    你好好查查你抓的包,肯定是要这个参数的
    Cheez
        4
    Cheez  
    OP
       2018-07-30 19:45:09 +08:00
    @maemual #3 ........我查了很多遍了,不需要的,要是要的话我也不会来问了
    alvin666
        5
    alvin666  
       2018-07-30 19:58:57 +08:00 via Android
    知乎的反爬做的很好的,别太高估自己了
    Cheez
        6
    Cheez  
    OP
       2018-07-30 21:45:06 +08:00
    @alvin666 #5 .....我不至于连 fiddler 都看不懂
    ToT
        7
    ToT  
       2018-07-30 21:54:47 +08:00
    是不是 user agent 里有 android,所以后台会强制检测 android 版本信息什么的参数?

    “问题是我在 fiddler 抓到的就是这样的,一模一样...." 这句话我没懂,fiddler 是能成功抓取还是不能呢?
    Cheez
        8
    Cheez  
    OP
       2018-07-30 22:11:18 +08:00
    @ToT #7


    我在 fiddler 抓正常的请求,成功接收。

    我把所有 headers 都复制到代码里面,用 Python 跑,结果失败了,一直返回 MalformRequestException 错误。

    我又加了个 x-app-za 的 header 就突然好了...
    Cheez
        9
    Cheez  
    OP
       2018-07-31 09:57:46 +08:00
    挽尊
    fan776783
        10
    fan776783  
       2018-07-31 12:37:32 +08:00
    x-app-za 这种是自定义头吗
    Cheez
        11
    Cheez  
    OP
       2018-07-31 12:42:11 +08:00
    @fan776783 #10 是的
    dongxiaozhuo
        12
    dongxiaozhuo  
       2018-07-31 14:49:38 +08:00 via iPhone
    这是要脚本刷赞?

    如果是,建议别费心了,知乎刷赞的被检测到的话,会退回的。
    Cheez
        13
    Cheez  
    OP
       2018-07-31 14:51:06 +08:00
    @dongxiaozhuo #12 ......我在写个知乎爬虫
    dongxiaozhuo
        14
    dongxiaozhuo  
       2018-07-31 14:54:08 +08:00 via iPhone
    @Cheez 爬内容不应该是 GET 请求吗?你给的代码是是什么 POST voters 资源…
    Cheez
        15
    Cheez  
    OP
       2018-07-31 15:08:06 +08:00
    @dongxiaozhuo #14 因为我想要完成一个知乎爬虫的所有功能,比如获取赞同者,赞同,取消赞同等等所有操作
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3826 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:30 · PVG 18:30 · LAX 02:30 · JFK 05:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.