【发布时间】:2010-12-19 03:15:11
【问题描述】:
所以我有以下一组解析美味信息的代码。它以以下格式从 Delicious 页面打印数据
书签 |人数
书签 |人数 等等……
我曾经使用以下方法来查找此信息。
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 秒。从代码的第一位到第二位时,它显着下降。我能做些什么来提高这里的性能吗?
【问题讨论】:
-
还要注意
class是find/findAll的第二个位置参数,所以你可以使用soup.find('div', 'data')和bookmark.findAll('span', 'delNavCount')。
标签: python web-crawler beautifulsoup mechanize delicious-api