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 '\n'
        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))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM