zoukankan      html  css  js  c++  java
  • python获取动态网站上面的动态加载的数据(初级)

     我们在处理一些网站数据的时候,有时候我们需要的数据很多都是动态加载的,而不都是静态的,以下以一个实例来介绍简单的获取动态数据,首先申明本人小白,还在学习python中,这个方法还是比较笨拙的,但是对于初学者还是需要知道的。

    首先我们的要求是获取下面文章的参考文献:

    刚刚开始,我的想法是使用lxml、BeatifulSoup、正则表达式来处理,这几个是处理静态网站的常用方法,查看网页源码我们会发现相应的div里面是空,也就是说上面的数据不是静态的,而是后面动态加载的,利用googl浏览器可以看到:

    标记的三个对应了网站里面的相似文献、参考文献、引证文献,我们需要的是参考文献,所以点击第二个:

    我们可以看到数据就在里面,然后点击Header,复制里面的URL:

    利用下面的代码就可以获取相应的数据了:

    #-*- coding:utf-8 -*-
    import requests
    url='http://xueshu.baidu.com/usercenter/data/schpaper?callback=jQuery110208239584223582068_1502539053728&wd=citepaperuri%3A(17d24f9533609a132a16703fde60ce19)&req_url=http%3A%2F%2Fwww.oalib.com%2Fpaper%2F4015889&type=reference&rn=10&page_no=1'
    data=requests.get(url)
    print data

    但是如果要获取所有的参考文献怎么办,我们不能一个链接一个链接的复制,那不就特别麻烦,下面是代码的改进,首先我们要知道总共有多少页参考文献,也就是URL里面的page_no的·值,以下为改进的代码:(其实我们也可以直接估计有50页参考文献,然后使用try。。。except。。。来获取异常也是可以的)

    #-*- coding:utf-8 -*-
    import requests
    
    n=相关页数
    url='http://xueshu.baidu.com/usercenter/data/schpaper?callback=jQuery110208239584223582068_1502539053728&wd=citepaperuri%3A(17d24f9533609a132a16703fde60ce19)&req_url=http%3A%2F%2Fwww.oalib.com%2Fpaper%2F4015889&type=reference&rn=10&page_no='
    for i in  range(1,n+1):
        data=requests.get(url+str(i))
        print data

    返回值是json格式的,剩下的就是处理json格式了(记得除去返回的多余数据),参见:http://www.cnblogs.com/ybf-yyj/articles/7351580.html。

    以下贴上所有代码:

    #-*- coding:utf-8 -*-
    import requests
    import re
    import json
    
    def get_reference(url):
        data=requests.get(url)
        json_datas=data.content
        
        #使用贪婪算法的正则表达式获取json类型的字符串
        json_data = re.compile(r"{.*}")
        json_data = json_data.search(json_datas).group()
        # 将获取的json字符串转化为字典
        title_data=json.loads(json_data)
    
        n=title_data.get('data').get("resultList")
        for i in range(0,len(n)):
            try:
                print 'reference:',
                print n[i].get('meta_di_info').get('sc_title')[0]
                for i in n[i].get('meta_di_info').get('sc_author'):
                    print i.get('sc_name')[1]+u',',
                print '
    '
            except:
                print i
    
    n=4
    url='http://xueshu.baidu.com/usercenter/data/schpaper?callback=jQuery110204974031490917943_1502604841329&wd=citepaperuri%3A(0689fe98fd34a1aac82d41225ad9ceca)&req_url=http%3A%2F%2Feuropepmc.org%2Fabstract%2Fmed%2F24235252&type=reference&rn=10&page_no='
    for i in  range(1,n+1):
        get_reference(url+str(i))
  • 相关阅读:
    JS BOM对象 History对象 Location对象
    JS 字符串对象 数组对象 函数对象 函数作用域
    JS 引入方式 基本数据类型 运算符 控制语句 循环 异常
    Pycharm Html CSS JS 快捷方式创建元素
    CSS 内外边距 float positio属性
    CSS 颜色 字体 背景 文本 边框 列表 display属性
    【Android】RxJava的使用(三)转换——map、flatMap
    【Android】RxJava的使用(二)Action
    【Android】RxJava的使用(一)基本用法
    【Android】Retrofit 2.0 的使用
  • 原文地址:https://www.cnblogs.com/ybf-yyj/p/7351493.html
Copyright © 2011-2022 走看看