2017-04-18 131 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审计处理。