我正在尝试使用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
比使用正则表达式更快,更易于维护,但我似乎从未有过良好的体验。
答案 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
,所以它可以正常工作