Html Python 3.4使用异步I/O拉取多个网站

Html Python 3.4使用异步I/O拉取多个网站,html,python-3.x,asynchronous,Html,Python 3.x,Asynchronous,在我的代码中,我生成了许多不同的URL地址,并从每个站点中提取一个特定的表。如果不使用并发操作,进程将非常缓慢,我希望优化速度 from lxml import html for eachTicker in ticker_list: bs_url = 'http://finance.yahoo.com/q/bs?s=%s' % eachTicker is_url = 'http://finance.yahoo.com/q/is?s=%s' % eachTicker c

在我的代码中,我生成了许多不同的URL地址,并从每个站点中提取一个特定的表。如果不使用并发操作,进程将非常缓慢,我希望优化速度

from lxml import html 

for eachTicker in ticker_list:
    bs_url = 'http://finance.yahoo.com/q/bs?s=%s' % eachTicker
    is_url = 'http://finance.yahoo.com/q/is?s=%s' % eachTicker
    cf_url = 'http://finance.yahoo.com/q/cf?s=%s' % eachTicker

    bs_tree = html.parse(bs_url)
    is_tree = html.parse(is_url)
    cf_tree = html.parse(cf_url)

    cf_content = cf_tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr/td
    bs_content = bs_tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr/td
    is_content = is_tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr/td
我想使用异步I/O(Asyncio)使这个过程更快。有什么想法吗

我目前正在玩下面的代码,看看是否可以让它工作。我想把它放在一个for循环中,并通过它运行一个url列表

 import asyncio
 import aiohttp

 @asyncio.coroutine
 def print_page(url):
     response = yield from aiohttp.request('GET', url)
     body = yield from response.read_and_close(decode=False)
     print(body)

 loop = asyncio.get_event_loop()
 loop.run_until_complete(print_page('http://www.google.com/'))

 loop.run_until_complete(asyncio.wait([print_page('http://www.finance.yahoo.com/q/cf?s=ABT'),
                                  print_page('http://www.finance.yahoo.com/q/cf?s=MMM')]))

我在你的问题中没有看到任何异步IO代码。您遇到了哪些具体问题?您确定网络I/O是瓶颈,html解析不受CPU限制吗?您知道如何同时运行多个asyncio协程吗?您知道如何使用asyncio发出http请求吗?您确定yahoo.com不会阻止来自您IP的请求吗?你考虑过了吗?@J.F.Sebastian我不知道从哪里开始上课。如果多处理、线程或异步IO工作得更好。我真的需要优化这个程序的速度。我已经做了一些研究,现在正在处理一些代码,我已经编辑了这个问题,将其包括在内。当前的asyncio代码有什么问题?您有
[f(url1),f(url2)]
。要创建for循环,请使用列表理解:
[url1,url2]
,@J.f.Sebastian中的url的
[f(url)]。。。您对asyncio v线程化v多处理有什么看法?我不确定哪一个是最好的学习方法。把它全部学习。这都是关于并发性的。要了解这一切,请看我在您的问题中没有看到任何异步IO代码。您遇到了哪些具体问题?您确定网络I/O是瓶颈,html解析不受CPU限制吗?您知道如何同时运行多个asyncio协程吗?您知道如何使用asyncio发出http请求吗?您确定yahoo.com
不会阻止来自您IP的请求吗?你考虑过了吗?@J.F.Sebastian我不知道从哪里开始上课。如果多处理、线程或异步IO工作得更好。我真的需要优化这个程序的速度。我已经做了一些研究,现在正在处理一些代码,我已经编辑了这个问题,将其包括在内。当前的asyncio代码有什么问题?您有
[f(url1),f(url2)]
。要创建for循环,请使用列表理解:
[url1,url2]
,@J.f.Sebastian中的url的
[f(url)]。。。您对asyncio v线程化v多处理有什么看法?我不确定哪一个是最好的学习方法。把它全部学习。这都是关于并发性的。要了解这一切,请参阅