1

我正在尝试使用 Python 从页面中抓取一些文本。应该很容易,但lxml似乎总是让我感到惊讶。这是我尝试过的:

>>> import lxml.html
>>> import urllib

>>> response = urllib.urlopen('http://www.codecademy.com/username')
>>> tree = lxml.html.parse(response)
>>> root = tree.getroot()
>>> root.find_class('stat-count')
[]

我很困惑。以下是在 html 中:(<span class="stat-count">27</span>同一个类有第二个跨度。)我无法想象为什么该find_class方法适用于某些元素,但不适用于其他元素。

我愿意接受任何获取这些span标签中第一个内容的策略。但我真的很想深入了解这样做的正确方法。我想认为使用lxml会比使用正则表达式更快、更易于维护,但我似乎从来没有很好的体验。

4

2 回答 2

1

它应该工作,提供root = tree.getroot()

import lxml.html
import urllib

response = urllib.urlopen('http://www.codecademy.com/username')
tree = lxml.html.parse(response)
# tree.write('/tmp/test.html')
root = tree.getroot()
print(root.find_class('stat-count'))

产量

[<Element span at 0xa3146bc>, <Element span at 0xa3146ec>]
于 2013-09-05T01:18:41.240 回答
0

你应该beautifulsoup试一试!

import urllib
from bs4 import BeautifulSoup as BS

response = urllib.urlopen('http://www.codecademy.com/username').read()
soup = BS(response)
points = soup.find("span",{"class":"stat-count"}).get_text()
print points

对于给定的 url 这会打印0但是当我使用我的 codeacademy 用户名时它会返回90所以它工作正常

于 2013-09-05T01:21:33.413 回答