【问题标题】:How to parse this HTML table with BeautifulSoup and Regex?如何用 BeautifulSoup 和 Regex 解析这个 HTML 表?
【发布时间】:2012-05-11 06:22:47
【问题描述】:

我的 HTML:

            <table cellspacing="0" cellpadding="2" rules="all" border="1" id="branchTable" width="100%">
            <tr class="TitleTable">
                <th scope="col" width="250"><b>Branch Name</b></th><th scope="col" width="35%"><b>Branch Date</b></th><th scope="col" width="35%"><b>Branch Origin</b></th>
            </tr><tr class="RowSet">
                <td><a class="blue" href="javascript: OpenWindow(&#39;/home/data/files/fetchRecord.php?fileID=342&#39;)">SFO Branch</a></td><td class="red">03/16/2012</td><td class="red">&nbsp;</td>
            </tr><tr class="RowSet">
                <td><a class="blue" href="javascript: OpenWindow(&#39;/home/data/files/fetchRecord.php?fileID=884&#39;)">LAX Branch</a></td><td class="red">03/16/2012</td><td class="red">06/16/1985</td>
            </tr><tr class="RowSet">
                <td><a class="blue" href="javascript: OpenWindow(&#39;/home/data/files/fetchRecord.php?fileID=83&#39;)">DC Branch</a></td><td class="red">03/16/2012</td><td class="red">&nbsp;</td>
            </tr>
            </table>

到目前为止我的代码:

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(pageSource)
table = soup.find("table", id = "branchTable")
rows = table.findAll("tr", {"class":"RowSet"})

data = [[td.findChildren(text=True) for td in tr.findAll("td")] for tr in rows]
print data

输出:

SFO Branch  03/16/2012  &nbsp;
LAX Branch  03/16/2012  06/16/1985
DC Branch   03/16/2012  &nbsp;

希望:

我想获取标签中包含的数据以及 ID (fetchRecord.php?fileID=342)。不确定如何获取该值。 BeautifulSoup 或正则表达式,请帮忙。谢谢!

【问题讨论】:

  • 你到底想做什么?
  • 解析 html 并抓取数据,如输出所示。我也想抢fileID,不知道怎么弄。

标签: python regex beautifulsoup html-table


【解决方案1】:

您可以使用正则表达式来解析href,但我懒得写。请参阅下面的href_parse,了解在检索 URI 后解析查询字符串的正确方法:

from urlparse import urlparse
from urlparse import parse_qs

def href_parse(value):
    if (value.startswith('javascript: OpenWindow(&#39;') and 
        value.endswith('&#39;)'):
        begin_length = len('javascript: OpenWindow(&#39;')
        end_length = len('&#39;)')
        file_location = value[begin_length:-end_length]

        query_string = urlparse(file_location).query
        query_dict = parse_qs(query_string)
        return query_dict.get('fileId', None)


href_data = [[href_parse(td.find('a', attrs={'class': 'blue'})['href']) 
              for td in tr.findAll("td")] 
              for tr in rows]
print href_data

【讨论】:

    【解决方案2】:

    这个怎么样

    import re
    urlRE = re.compile('javascript: OpenWindow\(\&#39;(.*)#39;\)')
    ...
    urlMat = urlRE.match(value)
    if urlMat:
       url = urlMat.groups()[0]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-12
      • 2011-06-15
      • 2011-09-24
      • 2014-09-03
      • 2011-05-10
      • 2011-06-13
      • 1970-01-01
      • 2011-01-04
      相关资源
      最近更新 更多