2017-04-18 25 views
0

私はBeautiful Soup for Pythonを学び、ウェブサイト "https://www.twitteraudit.com/"を解析しようとしています。検索バーにtwitter idを入力すると、数分の1秒でIDの結果が返されますが、IDによってはデータの処理に約1分かかります。この場合、HTMLがロードされた後、または結果が完了した後、どのように解析することができますか?そして、私はそれをループしようとしましたが、それはそのように動作しません。しかし、私が考えたのは、ブラウザを開いてウェブリンクを読み込んだら、それが完了したら、コンピュータにキャッシュを保存していて、次回は同じIDで実行したときです。Python Beautiful Soup

誰もがこれで私を助けることはできますか?私は助けに感謝します。私は、問題はTwitterのIDのいくつかは、まだ監査を受けておりません、と私はIndexErrorを得ていたと思い下記のコード>>

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" 「ジャパンメリニ」、「リバーギルハルハル」、「エドミハミルトン」、「トムクルーズアクト」] –

+0

私はあなたが正しいと思っています、スクリプトウェブサイトから結果がないと報告したときに終了します。 'for 'ループを' while True: '-loopに置くと、結果を持たない' ID'で一時停止します。同時に、ページから監査を要求しますそのIDのために、そして結果が利用可能であるとき、スクリプトは続行します。それはそれを修正するだろうか? – davedwards

答えて

0

を添付してください。ただし、そのエラーをキャッチするwhile True:ループのfakecheck(u)に電話をかけると、その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のウェブサイト上の「Audit」ボタンをクリックし、監査が完了したら、すべてのID監査が処理されるまでスクリプトを通常通りに続けました。

関連する問題