使用cssselect来使用lxml获取url

时间:2012-05-01 05:35:31

标签: python lxml

我正在处理一个网址&我想获取特定的链接。
但是有很多桌子 如何使用lxml在一行或两行代码中处理它?<​​/ p>

url = 'http://www.bnm.gov.my/index.php?ch=109&pg=294&mth=3&yr=2012&eId=box1'

我想下载excel for
表2.1利率:银行机构

当html中存在多个表格和tds和trs时,我不明白如何工作。

1 个答案:

答案 0 :(得分:1)

嗯,首先,该链接或该表行没有唯一标识符,因此无法使用cssselect获取它,并且您无法在不知道它的哪一部分的情况下获取它URL或标题将是。

假设您要匹配部分编号2.1。查看页面,节号始终位于连续的第一个单元格中。找到正确的单元格后,您可以遍历其第二个兄弟节点,该节点应该包含链接,然后从链接中获取URL。

>>> import urllib2
>>> from StringIO import StringIO
>>> from lxml import etree
>>> url = "http://www.bnm.gov.my/index.php?ch=109&pg=294&mth=3&yr=2012&eId=box1"
>>> ufile = urllib2.urlopen(url)
>>> root = etree.parse(ufile, etree.HTMLParser())
>>> for e in root.getiterator('tr'):
...     fc = e[0]       # first child
...     if fc.tag == 'td' and fc.text == '2.1':
...         link = fc.getnext().getnext()[0]  # first child of 2nd sibling
...         print link.attrib["href"]
...
files/publication/msb/2012/3/xls/2.1.xls