我一直在努力编写最近几个小时的程序来完成我认为非常简单的任务:
我尝试过使用带有lxml的Xpath,但没有经验,每一个结构都带有一个空白数组。
报价的实际内容似乎包含在“sqq。”类中。
如果我通过Firebug导航网站,单击DOM选项卡,它出现在textNode属性“wholeText”或“textContent”中 - 但我不知道如何以编程方式使用该知识。
有什么想法吗?
答案 0 :(得分:6)
import lxml.html
import urllib
site = 'http://thinkexist.com/search/searchquotation.asp'
userInput = raw_input('Search for: ').strip()
url = site + '?' + urllib.urlencode({'search':userInput})
root = lxml.html.parse(url).getroot()
quotes = root.xpath('//a[@class="sqq"]')
print quotes[0].text_content()
...如果你输入'莎士比亚',它会返回
In real life, unlike in Shakespeare, the sweetness
of the rose depends upon the name it bears. Things
are not only what they are. They are, in very important
respects, what they seem to be.
答案 1 :(得分:1)
如果您没有必要通过XPath实现此功能,则可以使用BeautifilSoup这样的库(让myXml
变量包含页面HTML源代码):
soup = BeautifulSoup(myXml)
for a in soup.findAll(a,{'class' : 'sqq'}):
# this is your quote
print a.contents
无论如何,阅读BS文档,它可能对一些不需要XPath功能的抓取需求非常有用。
答案 2 :(得分:1)
您可以打开html源代码,找出您要查找的确切类别。例如,要获取您可以执行的页面上遇到的第一个StackOverflow用户名:
#!/usr/bin/env python
from lxml import html
url = 'http://stackoverflow.com/questions/4710307'
tree = html.parse(url)
path = '//div[@class="user-details"]/a[@href]'
print tree.findtext(path)
# -> Parseltongue
# OR to print text including the text in children
a = tree.find(path)
print a.text_content()
# -> Parseltongue