为什么lxml没有找到这个类?

时间:2013-09-05 01:10:23

标签: python css web-scraping lxml

我正在尝试使用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方法对某些元素这样工作,但对其他元素则不然。< / p>

我愿意接受任何获取这些span代码中第一个内容的策略。但我真的很想深入了解正确的方法。我想使用lxml比使用正则表达式更快,更易于维护,但我似乎从未有过良好的体验。

2 个答案:

答案 0 :(得分: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>]

答案 1 :(得分: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

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