2017-04-18 135 views
0

我正在學習Python的美麗湯,並試圖解析一個網站「https://www.twitteraudit.com/」。當我在搜索欄中輸入推特ID時,它會在幾秒鐘內返回某個ID的結果,但某些ID需要大約一分鐘來處理數據。在這種情況下,如何在加載HTML或結果完成後解析HTML?我試圖循環它,但它不這樣工作。但我想到的是,如果我打開一個瀏覽器並加載網頁鏈接,一旦它完成它將緩存存儲在計算機中,並且下一次當我運行相同的ID時,它完美地工作。Python美麗的湯

任何人都可以幫我解決這個問題嗎?我很感激幫助。我附上下面的代碼>>

from bs4 import BeautifulSoup as soup 
from urllib.request import urlopen as uReq 
import re 
from re import sub 

def HTML(myURL): 
    uClient = uReq(myURL) 
    pageHTML = uClient.read() 
    uClient.close() 

    pageSoup = soup(pageHTML, "html.parser") 
    return pageSoup 

def fakecheck(usr): 
    myURLfc = "https://www.twitteraudit.com/" + usr 
    pgSoup = HTML(myURLfc) 

    foll = pgSoup.findAll("div",{"class":"audit"}) 


    link = foll[0].div.a["href"] 
    real = foll[0].findAll("span",{"class":"real number"})[0]["data-value"] 
    fake = foll[0].findAll("span",{"class":"fake number"})[0]["data-value"] 
    scr = foll[0].findAll("div",{"class":"score"})[0].div 
    scoresent = scr["class"][1] 
    score = re.findall(r'\d{1,3}',str(scr))[0] 
    return [link, real, fake, scoresent, score] 


lis = ["BarackObama","POTUS44","ObamaWhiteHouse","MichelleObama","ObamaFoundation","NSC44","ObamaNews","WhiteHouseCEQ44","IsThatBarrak","obama_barrak","theprezident","barrakubama","BarrakObama","banackkobama","YusssufferObama","barrakisdabomb_","BarrakObmma","fuzzyjellymasta","BarrakObama6","bannalover101","therealbarrak","ObamaBarrak666","barrak_obama"] 

for u in lis: 
    link, real, fake, scoresent, score = fakecheck(u) 

    print ("link : " + link) 
    print ("Real : " + real) 
    print ("Fake : " + fake) 
    print ("Result : " + scoresent) 
    print ("Score : " + score) 
    print ("=================") 
+0

做一些數據沒有收到?我運行了你的代碼,得到了所有23個查詢的結果,它似乎工作正常。 – davedwards

+0

謝謝你的回覆......只需用這些值更改lis值就可以瞭解情況..... lis = [「TomCruise」,「TomCruiseFanCom」,「TomCruiseBRCom」,「TheAmyNicholson」,「TomCruiseIndo」,「 MissionFilm「,」JackReacher「,」Not_TomCruise「,」Pompey_Dave「,」tomcruiseblog「,」cubanalaf「,」JustinMeliNY「,」rivergyllenhaal「,」eddiehamilton「,」TomCruiseActor「] –

+0

我明白了,當網站報告沒有結果時退出。如果你把'for'-loop放在''while'True:'-loop中,它會暫停在沒有任何結果的'ID'上,同時,我去請求頁面的審計對於'ID',並且當結果可用時,腳本繼續。這會解決它嗎? – davedwards

回答

0

我認爲這個問題是一些Twitter的ID的的尚未審計,所以我得到了一個IndexError。但是,撥打fakecheck(u)撥打while True:循環捕獲該錯誤將持續檢查網站,直到對該ID執行了審計。

我把這個代碼lis定義後:

def get_fake_check(n): 
    return fakecheck(n) 

for u in lis: 
    while True: 
     try: 
      link, real, fake, scoresent, score = get_fake_check(u) 
      break 
     except: 
      pass 

我不知道是否有一種方法可以自動在網站上的審覈要求,但是當一個查詢正在等待,我手動點擊「審覈」該按鈕在該網站上的ID,一旦審計完成後,腳本繼續像往常一樣,直到所有ID審計處理。