BeautifulSoup Perfを改善します
-
11-10-2019 - |
質問
したがって、おいしい情報を解析するコードの次のセットがあります。次の形式でおいしいページからのデータを印刷します
ブックマーク|人々の数
ブックマーク|人の数など...
以前は、この情報を見つけるために次の方法を使用していました。
def extract (soup):
links = soup.findAll('a',rel='nofollow')
for link in links:
print >> outfile, link['href']
hits = soup.findAll('span', attrs={'class': 'delNavCount'})
for hit in hits:
print >> outfile, hit.contents
#File to export data to
outfile = open("output.txt", "w")
#Browser Agent
br = Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
url= "http://www.delicious.com/asd"
page = br.open(url)
html = page.read()
soup = BeautifulSoup(html)
extract(soup)
しかし、問題は、一部のブックマークには多くの人がいないことでした。そのため、データを同時に取得し、ブックマークと数の人を並べて印刷するように、別の人を解析することにしました。
編集:この更新されたバージョンで15〜5秒間、それ以上の提案
def extract (soup):
bookmarkset = soup.findAll('div', 'data')
for bookmark in bookmarkset:
link = bookmark.find('a',)
vote = bookmark.find('span', 'delNavCount')
try:
print >> outfile, link['href'], " | " ,vote.contents
except:
print >> outfile, "[u'0']"
#print bookmarkset
#File to export data to
outfile = open("output.txt", "w")
#Browser Agent
br = Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
url= "http://www.delicious.com/asd"
page = br.open(url)
html = page.read()
soup = BeautifulSoup(html)
extract(soup)
しかし、これのパフォーマンスはひどいですが、最初のページを解析するのに17秒かかり、その後はかなりまともなマシンで約15秒かかります。コードの最初のビットから2番目のビットに進むと、大幅に低下しました。ここでパフォーマンスを輸入するためにできることはありますか?
解決
なぜあなたが割り当てているのかわかりません vote
- 2回。最初の割り当ては不要であり、実際には非常に重いです。なぜなら、各反復でドキュメント全体を解析する必要があるからです。なんで?
vote = BeautifulSoup(html)
vote = bookmark.findAll('span', attrs={'class': 'delNavCount'})
他のヒント
パフォーマンスを心配している場合は、スクリーンスクレーピングではなく、おいしいAPIに話しかけるものを見るかもしれません。 Pydelious. 。例えば:
>>> import pydelicious
>>> pydelicious.get_userposts('asd')
[{'extended': '', 'description': u'Ksplice - System administration and software blog', 'tags': u'sysadm, blog, interesting', 'url': u'http://blog.ksplice.com/', 'user': u'asd'
BeautifulSoupは、この場合に必要なものよりもはるかに多くのことを行います。あなたが本当に速度を上げたいなら、私はurllib +シンプルなラインバイラインパーサーのより基本的なアプローチをとることをお勧めします。
「ASD」の例のサイズをページに解析すると、最新のマシンで1秒未満かかるはずです。
所属していません StackOverflow