2017-07-28 152 views
-1

以下抓取虽然很短,但速度很慢。我的意思是,“在一部长篇电影中流行,”慢。优化网络抓取

def bestActressDOB(): 
    # create empty bday list 
    bdays = []  
    # for every base url 
    for actress in getBestActresses("https://en.wikipedia.org/wiki/Academy_Award_for_Best_Actress"): 
     # use actress list to create unique actress url 
     URL = "http://en.wikipedia.org"+actress 
     # connect to html 
     html = urlopen(URL) 
     # create soup object 
     bsObj = BeautifulSoup(html, "lxml") 
     # get text from <span class='bday"> 
     try: 
      bday = bsObj.find("span", {"class":"bday"}).get_text() 
     except AttributeError: 
      print(URL) 
     bdays.append(bday) 
     print(bday) 
    return bdays 

它吸引从表中一个维基百科的页面上被提名为奥斯卡奖每一个女演员的名字,然后将其转换是一个列表,使用这些名称创建URL来访问每个女演员维基,它抓起她的出生日期。这些数据将被用来计算每个女演员提名或赢得奥斯卡最佳女主角奖的年龄。除了大O之外,有没有办法实时加速实现。我几乎没有这方面的经验,所以我不确定这是多么正常。思考?

编辑:请求子程序

def getBestActresses(URL): 
    bestActressNomineeLinks = [] 
    html = urlopen(URL) 
    try: 
     soup = BeautifulSoup(html, "lxml") 
     table = soup.find("table", {"class":"wikitable sortable"}) 
    except AttributeError: 
     print("Error creating/navigating soup object") 
    table_row = table.find_all("tr") 
    for row in table_row: 
     first_data_cell = row.find_all("td")[0:1] 
     for datum in first_data_cell: 
      actress_name = datum.find("a") 
      links = actress_name.attrs['href'] 
      bestActressNomineeLinks.append(links) 
    #print(bestActressNomineeLinks) 
    return bestActressNomineeLinks 
+1

如果速度是№1的优先级,那么我建议您将解析器重写(或集成)为['Scrapy'](https://doc.scrapy.org/en/latest/)框架。 –

+0

感谢您的回复!这段代码现在正在Spyder中运行,并将被转移到Jupyter笔记本上,在那里它将使用数据分析和它用于补充的统计数据。 Scrapy需要一个自己的目录,无法与Jupyter中的Pandas + stats包集成,不是吗? – Ryan

+1

好吧,我想你混淆了事情 - 'Spyder'和'Jupyter'是IDE。换句话说,如果我们称之为Scrapy是一个带有自己内容的模块,就像例如'BeautifulSoup'或任何其他用于解析的模块一样。我用'Scrapy'使用了'pandas',在'Spyder'中写了我的代码并从'bash'启动了解析器。 –

回答

1

我会建议尝试更快的计算机上,甚至像谷歌云平台,微软的Azure,或亚马逊网络服务的服务运行。没有任何代码可以让它变得更快。

+0

感谢您的评论!从理论上讲,这是有道理的,但这是一个小型的数据分析/统计项目。我的Mac必须位于其所在的位置。学习额外的技术为这个特定项目增加的成本是没有理由的预期收益。 – Ryan

+0

所有这些服务提供免费版本,将运行它!我在过去的所有时间都用过它们,从不付钱。如果我有帮助,请将我的答案标记为正确,以便其他人可以看到它! – James

+0

我会检查他们。然而,“增量成本”在这种情况下意味着“额外的麻烦”。如上所述,这一切都将发生在Jupyter笔记本上,它会告诉分析/统计故事。在一个地方做(环境)是理想的。但是,我会检查你的建议。如果我走这条路,我肯定会赞扬你的回应。 – Ryan