立即注册

编程论坛

广告联系qq1031180668广告位
查看: 389|回复: 0

[python] Ajax加载方式的数据获取

[复制链接]
  • ta_mind
    擦汗
    2019-3-27 07:25
  • classn_01: 72 classn_02

    [LV.6]常住居民II

    1021

    主题

    1742

    帖子

    3558

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    3558

    最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    发表于 2018-7-21 02:29:54 | 显示全部楼层 |阅读模式
    有些网页内容使用AJAX加载,只要记得,AJAX一般返回的是JSON,直接对AJAX地址进行post或get,就返回JSON数据了。比如豆瓣电影,这个页面显示的是热门国产剧:
    https://movie.douban.com/tv/#!type=tv&tag=%E5%9B%BD%E4%BA%A7%E5%89%A7&sort=recommend&page_limit=20&page_start=0

    Ajax加载方式的数据获取

    Ajax加载方式的数据获取

    在浏览器上我们可以看到很多电影名字但是我们在网页源码中找不到的。
    我们刷新页面同时使用抓包工具fidder抓包,

    Ajax加载方式的数据获取

    Ajax加载方式的数据获取


    可以找到这条地址:https://movie.douban.com/j/searc ... mit=20&page_start=0
    去掉后面的参数这条js地址就是:https://movie.douban.com/j/search_subjects?
    得到了js的地址,我们就可以通过这个地址来获取我们想要的获取的热门电视剧。
    实现代码:
    [Python] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    import urllib.request
    
    # js地址
    url="https://movie.douban.com/j/search_subjects?"
    #请求头
    headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134"} 
    
    #提交参数
    fromdata={
        "type":"tv",
        "tag":"国产剧",
        "sort":"recommend",
        "page_start":"0",
        "page_limit":"20",
    }
    #参数编码转换
    fromdata=urllib.parse.urlencode(fromdata)
    fromdata=fromdata.encode("utf-8")
    #提交请求
    req=urllib.request.Request(url,data=fromdata,headers=headers)
    #获取数据
    html=urllib.request.urlopen(req)
    print(html.read().decode("utf-8"))
    



    获取到内容后我们还可以根据需求对数据进行一些处理,不过都很简单。
    问题:为什么有时候POST也能在URL内看到数据?
    • GET方式是直接以链接形式访问,链接中包含了所有的参数,服务器端用Request.QueryString获取变量的值。如果包含了密码的话是一种不安全的选择,不过你可以直观地看到自己提交了什么内容。
    • POST则不会在网址上显示所有的参数,服务器端用Request.Form获取提交的数据,在Form提交的时候。但是HTML代码里如果不指定 method 属性,则默认为GET请求,Form中提交的数据将会附加在url之后,以?分开与url分开。
    • 表单数据可以作为 URL 字段(method="get")或者 HTTP POST (method="post")的方式来发送。比如在下面的HTML代码中,表单数据将因为 (method="get") 而附加到 URL 上:








    不积跬步,无以至千里
    游客
    回复
    您需要登录后才可以回帖 登录 | 立即注册

    手机版|Archiver|小黑屋|sitemap| 从零开始,编程论坛 - 一个单纯的编程学习交流论坛 ( 豫ICP备15032706号 )

    GMT+8, 2019-7-21 19:06 , Processed in 1.120229 second(s), 27 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表