从具有特定属性的HTML标记中提取数据

时间:2016-08-26 05:34:08

标签: python python-2.7 beautifulsoup

<tr bgcolor="#FFFFFF">
    <td class="tablecontent" scope="row" rowspan="1">
        <a href="http://netprofile-us2/netprofile/npIndex.do?cpyKey=80823">ZURICH AMERICAN INSURANCE COMPANY</a>
    </td>
    <td class="tablecontent" scope="row" rowspan="1">
        FARMERS GROUP INC (14523)
    </td>
    <td class="tablecontent" scope="row">
        znaf
    </td>
    <td class="tablecontent" scope="row">
        anhm
    </td>
</tr>

我有一个HTML文档,其中包含多个tr标记。我想从每个href标记下的第一个td和第三个td标记中的数据中提取tr链接。如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

您可以找到所有tr元素,迭代它们,然后针对内部td元素执行特定于上下文的搜索,并获取第一个和第三个元素:

for tr in soup.find_all('tr'):
    cells = tr.find_all('td')
    if len(cells) < 3:
        continue  # safety pillow

    link = cells[0].a['href']  # assuming every first td has an "a" element
    data = cells[2].get_text()

    print(link, data)

作为旁注,根据您在HTML解析中要完成的工作,我通常会发现pandas.read_html()是一种非常方便的方法,可以将HTML表解析为dataframes并在之后处理数据帧,这是非常方便的数据结构。

答案 1 :(得分:0)

您可以使用css选择器nth-of-type浏览td

这是一个样本“

soup = BeautifulSoup(html, 'html.parser')
a = soup.select('td:nth-of-type(1) a')[0]
href = a['href']
td = soup.select("td:nth-of-type(3)")[0]
text = td.get_text(strip=True)