【问题标题】:Python: find the 2nd td child from all tr childrenPython:从所有 tr 孩子中找到第二个 td 孩子
【发布时间】:2017-10-16 17:14:07
【问题描述】:

我的目标是获取所有的法庭案件编号并将它们放入 Excel 文件夹中。案例在第2列

我的代码:

courtCases = driver.find_elements_by_css_selector('body > table:nth-child(3) > tbody > tr:nth-child* > td:nth-child(2)')
for courtCase in courtCases:
    print(courtCase.text)

这会引发错误

selenium.common.exceptions.InvalidSelectorException:消息:无效选择器:指定了无效或非法的选择器。

我可以通过输入确切的 css 路径和 xpath 来获得诉讼,例如:

courtCases = driver.find_elements_by_css_selector('body > table:nth-child(3) > tbody > tr:nth-child(7) > td:nth-child(2) > font')

我需要在第 2 列 td:nth-child(2) 中收集所有球场。

无论如何我的问题是:谁能帮我写一个好的 css-selector 或 xpath 来获取所有的法庭日期?

一些html

<html>
<head>
<title>Wejis - Dayton Municipal Court</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<table width="750" border="0">
  <tr>
    <td width="185"><font color="#003399" size="2" face="Verdana, Arial, Helvetica, sans-serif">Run 
      Date: 10/16/2017 </font></td>
    <td width="380"><div align="center">
        <p><strong><font color="#003399" size="4" face="Verdana, Arial, Helvetica, sans-serif">Housing 
          Docket Report</font></strong></p>
        <p><strong><font color="#003399" size="2" face="Verdana, Arial, Helvetica, sans-serif">Dayton 
          Municipal Court</font></strong></p>
      </div></td>
    <td width="185"><div align="right"><font color="#003399" size="2" face="Verdana, Arial, Helvetica, sans-serif">Run 
       Time: 12:28 PM</font></div></td>
  </tr>
</table>
<table width="750">
    <tr><td colspan="4">&nbsp;</td></tr>
    <tr>
        <td width="250"><strong><font color="#003399" size="2" face="Verdana, Arial, Helvetica, sans-serif">Court Date: September 20, 2017</font></strong></td>
        <td width="140"><strong><font color="#003399" size="2" face="Verdana, Arial, Helvetica, sans-serif">All Sessions</font></strong></td>
        <td width="130"><div align="center"><strong><font color="#003399" size="2" face="Verdana, Arial, Helvetica, sans-serif">Courtroom 3A</font></strong></div></td>
        <td width="220"><div align="right"><strong><font color="#003399" size="2" face="Verdana, Arial, Helvetica, sans-serif">Judge Deirdre E Logan</font></strong></div></td>
    </tr>
</table>
<table width="750" border="0">
  <tr> 
    <td colspan="5"><hr></td>
  </tr>

            <tr> 
                <td colspan="2"><font color="#003399" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Housing Trial</strong></font></td>
                <td colspan="3"><font color="#003399" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong> 8:30AM </strong></font></td>
            </tr>
            <tr> 
                <td width="140"><strong><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">Defendant Name</font></strong></td>
                <td width="120"><strong><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">Case Number</font></strong></td>
                <td width="240"><strong><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">Charges</font></strong></td>
                <td width="115"><strong><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">Attorney</font></strong></td>
                <td width="115"><strong><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">Location</font></strong></td>
            </tr>

                <tr> 
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">Rosal, Jorge</font></td>
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">2017-CRM-005695</font></td>
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">MAINTAINING EXTERIOR<br></font></td>
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif"></font></td>
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">1347  Kingsley </font></td>
                </tr>

            <tr> 
                <td colspan="2"><font color="#003399" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Criminal Court Trial In Jail</strong></font></td>
                <td colspan="3"><font color="#003399" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong> 9:30AM </strong></font></td>
            </tr>
            <tr> 
                <td width="140"><strong><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">Defendant Name</font></strong></td>
                <td width="120"><strong><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">Case Number</font></strong></td>
                <td width="240"><strong><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">Charges</font></strong></td>
                <td width="115"><strong><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">Attorney</font></strong></td>
                <td width="115"><strong><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">Location</font></strong></td>
            </tr>

                <tr> 
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">Joyner, Melissa</font></td>
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">2017-CRB-000784</font></td>
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">DRUG ABUSE INSTRUMENT<br>DRUG PARAPHERNALIA/USE OR POSS<br></font></td>
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">Jenn A. Cunningham-Minnick</font></td>
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">1401  Harshman RD</font></td>
                </tr>

                <tr> 
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">Joyner, Melissa</font></td>
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">2017-CRM-000775</font></td>
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">LITTERING IN PARK<br></font></td>
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif"></font></td>
                    <td valign="top"><font color="#003399" size="1" face="Verdana, Arial, Helvetica, sans-serif">1401  Harshman RD</font></td>
                </tr>

【问题讨论】:

  • 您尝试过使用 BeautifulSoup 吗?一个相关的问题在这里:stackoverflow.com/questions/23377533/…。您可以将数据写入 pandas 数据帧,然后使用 pandas.to_csv 写出 csv
  • 是的,但我认为 OP 偏爱 XPath 表达式,我相信 BeautifulSoup 不支持
  • 我尝试了 xml 并且遇到了类似的问题: import requests url = raw_input("Enter a website to extract the URL's from:") r = requests.get("http://" + url) data = r.text soup = BeautifulSoup(data) 我无法获得示例中的 r.text,因为要获取: url = raw_input("Enter a website to extract the URL's from:") r = requests.get( "http://" +url) 我需要 url,我只能通过点击链接访问网页。如果重新加载网页会出现 404 错误——找不到文件或目录。我需要从我打开的网页中获取数据
  • 要重现我正在获取数据的页面,请转到 wejis.com/pa/qhousingdocket.cfm 并从下拉菜单中单击 9/20/2017,然后单击生成报告。

标签: python selenium xpath css-selectors


【解决方案1】:

通过 XPath 找到它:

courtCases = driver.find_elements_by_xpath('//td[2]/font[@size="1"]')
for courtCase in courtCases:
    print(courtCase.text)

注意所有法庭案件的字体大小为 1。如果您要省略此属性,您也会得到时间。

【讨论】:

  • 哇!!谢谢你。我需要提高我的 xpath 技能。我尝试了很多不同的东西。我可以使用“/html/body/table[3]/*”获取所有包含法庭案件的表格,并尝试从那里缩小范围,但没有运气,因此尝试切换到 css 选择器。
  • 不用担心。如果您知道如何使用 Chrome 的 Inspector 工具,找到它会更容易很多。 :-)
【解决方案2】:

您的选择器中的内容比您需要的要多。我发现它可以简化为以下。

td:nth-child(2) > font[size='1']

CSS 选择器比 XPath 更快且支持更好,但有些事情,例如通过包含的文本定位元素,只有 XPath 才能做到。

【讨论】:

  • 有趣的方法,感谢您的洞察力。我认为 CSS 会更快,我只是不确定它是如何构建的。 +1
猜你喜欢
  • 2011-06-05
  • 2020-07-05
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 2017-03-11
  • 2016-07-08
相关资源
最近更新 更多