从HTML表格

时间:2017-04-02 20:38:32

标签: javascript python html selenium xpath

我的网络刮刀搜索返回不同数量的表格,我不习惯处理表格。这些表各3列。我检查第一列中的街道号码是否正确。如果是,那么我需要从该行的第三列中获取链接。有什么想法吗?我的代码显然不起作用,但应该知道我正在尝试做什么。我的代码目前不是逐行处理数据,只是td由td。

处理

我的理想代码是什么样的:

  1. 抓住第一个表格行

  2. 检查第一列中的街道#是否匹配

  3. 如果#匹配,请抓住第三列中的链接

  4. 如果#不匹配,请转到检查下一个表格行

  5. 我仍然非常喜欢编程,因此我的代码仍处于笨拙的简单(但写得不好)的一面。

    HTML问题

    <tr>
      <td class="transactionTableBodyText">5250 S RAINBOW BLVD 1001  </td>
      <td class="transactionTableBodyText" align="center">SPRING VALLEY</td>
      <td class="transactionTableBodyText" align="center">
        <a id="DataGrid1__ctl3_HyperLink2" href="http://Sandgate.co.clark.nv.us/AssrRealProp/ParcelDetail.aspx?hdnParcel=16326214001&amp;hdnInstance=pcl7" target="_self">163-26-214-001</a>
      </td>
    </tr>
    

    我的Pythonic Selenium代码。

    td = driver.find_elements_by_css_selector("td.transactionTableBodyText")
        i = 0
        while i <= len(td):
            try:
                if StrtNum in td[i].text:
                    print("We matched %s!" % (StrtNum))
    
                    #This is the incorrect part where I try to get to the 'a' selector in the 3rd column from the correctly identified 1st column.
                    ParcelLink = td[i+2].driver.find_elements_by_css_selector('a').get_attribute('href')
                    print(ParcelLink)
                else:
                    return
            except:
                break
            i+=1
    

1 个答案:

答案 0 :(得分:1)

你的弓的另一个字符串: lxml 。它使您可以访问xpath表达式,这可以简化导航HTML的工作。

>>> from lxml import etree
>>> parser = etree.HTMLParser()
>>> tree = etree.fromstring(open('sample.htm').read(), parser)
>>> for td in tree.xpath('.//table/tr/td[@class="transactionTableBodyText"][1]'):
...     if td.text.startswith('5250'):
...         tr = td.getparent()
...         td_3_link = tr.xpath('./td[3]/a')
...         link = td_3_link[0].attrib['href']
... 
>>> link
'http://Sandgate.co.clark.nv.us/AssrRealProp/ParcelDetail.aspx?hdnParcel=16326214001&hdnInstance=pcl7'

正如你所看到的,我使用了一个REPL环境,这样我就可以尝试各种方法,因为我试图收集一些运行良好并且看起来相当稳健的东西。

几乎忘了,这是我正在解析的HTML。

<table>
    <tr>
      <td class="transactionTableBodyText">1000 S RAINBOW BLVD 1001  </td>
      <td class="transactionTableBodyText" align="center">SPRING VALLEY</td>
      <td class="transactionTableBodyText" align="center">
        <a id="DataGrid1__ctl3_HyperLink2" href="http://Sandgate.co.clark.nv.us/AssrRealProp/ParcelDetail.aspx?hdnParcel=16326214001&amp;hdnInstance=pcl7" target="_self">163-26-214-001</a>
      </td>
    </tr>
    <tr>
      <td class="transactionTableBodyText">5250 S RAINBOW BLVD 1001  </td>
      <td class="transactionTableBodyText" align="center">SPRING VALLEY</td>
      <td class="transactionTableBodyText" align="center">
        <a id="DataGrid1__ctl3_HyperLink2" href="http://Sandgate.co.clark.nv.us/AssrRealProp/ParcelDetail.aspx?hdnParcel=16326214001&amp;hdnInstance=pcl7" target="_self">163-26-214-001</a>
      </td>
    </tr>
    <tr>
      <td class="transactionTableBodyText">2000 S RAINBOW BLVD 1001  </td>
      <td class="transactionTableBodyText" align="center">SPRING VALLEY</td>
      <td class="transactionTableBodyText" align="center">
        <a id="DataGrid1__ctl3_HyperLink2" href="http://Sandgate.co.clark.nv.us/AssrRealProp/ParcelDetail.aspx?hdnParcel=16326214001&amp;hdnInstance=pcl7" target="_self">163-26-214-001</a>
      </td>
    </tr>
    <tr>
      <td class="transactionTableBodyText">2000 S RAINBOW BLVD 1001  </td>
      <td class="transactionTableBodyText" align="center">SPRING VALLEY</td>
      <td class="transactionTableBodyText" align="center">
        <a id="DataGrid1__ctl3_HyperLink2" href="http://Sandgate.co.clark.nv.us/AssrRealProp/ParcelDetail.aspx?hdnParcel=16326214001&amp;hdnInstance=pcl7" target="_self">163-26-214-001</a>
      </td>
    </tr>
</table>'''