我正在制作一个用于自动登录网站的小蟒蛇脚本。但我被卡住了。
我正在寻找打印到终端的一小部分html,位于该网站html文件中的此标记内:
<td class=h3 align='right'> John Appleseed</td><td> <a href="members_myaccount.php"><img border=0 src="../tbs_v7_0/images/myaccount.gif" alt="My Account"></a></td>
但是,如何提取和打印名称,John Appleseed?
顺便说一句,我在Mac上使用Pythons的Mechanize。
答案 0 :(得分:7)
Mechanize仅适用于获取html。一旦您想从html中提取信息,您可以使用例如BeautifulSoup。 (另见我对类似问题的回答:Web mining or scraping or crawling? What tool/library should I use?)
根据<td>
在html中的位置(您的问题不清楚),您可以使用以下代码:
html = ... # this is the html you've fetched
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
# use this (gets all <td> elements)
cols = soup.findAll('td')
# or this (gets only <td> elements with class='h3')
cols = soup.findAll('td', attrs={"class" : 'h3'})
print cols[0].renderContents() # print content of first <td> element
答案 1 :(得分:1)
由于您尚未提供页面的完整HTML,因此现在唯一的选择是使用string.find()或正则表达式。
但是,找到这个的标准方法是使用xpath。请参阅此问题:How to use Xpath in Python?
您可以使用firefox的“inspect element”功能获取元素的xpath。
例如,如果要在stackoverflow站点中找到用户名的XPATH。
答案 2 :(得分:1)
您可以使用解析器提取文档中的任何信息。我建议你使用lxml
模块。
这里有一个例子:
from lxml import etree
from StringIO import StringIO
parser = etree.HTMLParser()
tree = etree.parse(StringIO("""<td class=h3 align='right'> John Appleseed</td><td> <a href="members_myaccount.php"><img border=0 src="../tbs_v7_0/images/myaccount.gif" alt="My Account"></a></td>"""),parser)
>>> tree.xpath("string()").strip()
u'John Appleseed'
有关lxml
here