我正在尝试从容器内抓取文本,但我无法设法弄清其中的一些内容。
此代码适用于从以下格式的网页中为每个条目抓取三列的抓取工具:
<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.?????
我一直在坚持如何将关键字添加到输出中。任何帮助将不胜感激。
答案 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']