擅长:python、mysql、java
<p>以下是几种方法的时间比较:</p>
<pre><code>In [22]: %timeit [a.get('url') for a in BeautifulSoup(html).find_all('a', onclick='perviewPdf(this)')]
10 loops, best of 3: 59.6 ms per loop
In [23]: %timeit [a.get('url') for a in BeautifulSoup(html, 'lxml').find_all('a', onclick='perviewPdf(this)')]
10 loops, best of 3: 42.3 ms per loop
In [24]: %timeit lxml.html.fromstring(html).xpath('//a/@url')
100 loops, best of 3: 2.99 ms per loop
In [25]: %timeit [t.split('"', 1)[0] for t in html.split('perviewPdf(this)" url="')[1:]]
10000 loops, best of 3: 41.7 µs per loop
</code></pre>
<p>如果您已经下载了所有HTML文件,则解析1000个文件需要:</p>
<ul>
<li>使用BeautifulSoup和内置的<code>html.parser</code>60秒。你知道吗</li>
<li>使用BeautifulSoup和lxml解析器需要42秒。你知道吗</li>
<li>3秒,只需lxml。你知道吗</li>
<li>0.0417秒,字符串操作。你知道吗</li>
</ul>
<p>下载一个页面需要2.27秒,因此以每秒两次并发下载的合理速率限制,下载所有页面大约需要19分钟。你知道吗</p>
<p>虽然使用字符串操作提取url确实更快,但与下载HTML所需的19分钟相比,速度微不足道。你知道吗</p>
<p>就我个人而言,我会使用lxml,因为它是最简单和足够快的。使用BeautifulSoup将使脚本运行时增加约3%,但对于更复杂的HTML,使用它可能比使用XPath更容易。你知道吗</p>