如何使用Python从容器内的文本中刮除Td

时间:2019-05-03 15:40:13

标签: python beautifulsoup

我正在尝试从容器内抓取文本,但我无法设法弄清其中的一些内容。

此代码适用于从以下格式的网页中为每个条目抓取三列的抓取工具:

<td class="EP">1</td>
</tr>
<tr class="EG">
<td>
</td>
<td>
<a href="https://www.COMPANYWEBSITE/">COMPANY NAME</a>
</td>
<td DO="9999">
<div class="BN">9999</div>
<img src="https://www.IMAGE.com">
</td>
<td>
Keyword 1, Keyword 2, Keyword 3, Keyword 4
</td>
<td>New York City</td>
<td>USA</td>

我已经成功抓取了公司名称和BN(即9999),但是我也需要抓取每个关键字,这就是我遇到的麻烦。

我使用了以下Python代码:

page_soup = soup(page_html, "html.parser") 
TT = page_soup.findAll("tr",{"class":"EG"})
container = TT[0]

for container in TT:

    company_name = container.a.text

    b_n = container.div.text

    keywords = container.?????

我一直在坚持如何将关键字添加到输出中。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以使用nth-of-type

from bs4 import BeautifulSoup as bs

html = '''
<td class="EP">1</td>
</tr>
<tr class="EG">
<td>
</td>
<td>
<a href="https://www.COMPANYWEBSITE/">COMPANY NAME</a>
</td>
<td DO="9999">
<div class="BN">9999</div>
<img src="https://www.IMAGE.com">
</td>
<td>
Keyword 1, Keyword 2, Keyword 3, Keyword 4
</td>
<td>New York City</td>
<td>USA</td>

'''

page_soup = bs(html, 'lxml')
TT = page_soup.findAll("tr",{"class":"EG"})
for container in TT:
    print(container.select_one('td:nth-of-type(4)').text)

答案 1 :(得分:0)

只要关键字始终在第四列,就可以从容器中选择所有TD,然后选择第四列:

container.findAll('td')[3].string.strip().split(', ')
#['Keyword 1', 'Keyword 2', 'Keyword 3', 'Keyword 4']