打印某些HTML Python Mechanize

时间:2011-10-14 06:07:03

标签: python printing mechanize

我正在制作一个用于自动登录网站的小蟒蛇脚本。但我被卡住了。

我正在寻找打印到终端的一小部分html,位于该网站html文件中的此标记内:

<td class=h3 align='right'>&nbsp;&nbsp;John Appleseed</td><td>&nbsp;<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。

3 个答案:

答案 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。

  • 打开firefox并登录网站&amp;点击用户名(在我的案例中为shadyabhi)并选择Inspect Element。
  • 将鼠标悬停在标记上或右键单击它并“复制xpath”。

enter image description here

答案 2 :(得分:1)

您可以使用解析器提取文档中的任何信息。我建议你使用lxml模块。

这里有一个例子:

from lxml import etree
from StringIO import StringIO

parser = etree.HTMLParser()

tree = etree.parse(StringIO("""<td class=h3 align='right'>&nbsp;&nbsp;John Appleseed</td><td>&nbsp;<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

的更多信息