【问题标题】:Extract <td> Elements using BS4使用 BS4 提取 <td> 元素
【发布时间】:2021-04-30 18:48:24
【问题描述】:
我正在尝试浏览一个网站并使用 Chromedriver 提取一些信息。我在使用 BeautifulSoup 时遇到的问题是我找不到在 class 中提取表格的方法。
我尝试提取信息的方式如下所示:
results = soup.find_all("div", class_="widget widgetLarge fpPerfglissanteclassique")
有没有办法改变这一行,使它只返回<td>...</td> 中的信息,可以在类内部找到?!
提前感谢您的回答!
【问题讨论】:
标签:
python
html
web-scraping
beautifulsoup
【解决方案1】:
您的 results 变量包含另一个 BeautifulSoup 对象 (ResultSet),您可以对其进行迭代并在各个结果项上调用 find 和 find_all。
像这样:
from bs4 import BeautifulSoup
html = """
<div class="widget widgetLarge fpPerfglissanteclassique">
<td>item 1</td>
<td>item 2</td>
<td>item 3</td>
</div>
<div class="widget widgetLarge fpPerfglissanteclassique">
<td>item 4</td>
<td>item 5</td>
<td>item 6</td>
</div>
"""
soup = BeautifulSoup(html, "html.parser")
results = soup.find_all("div", class_="widget widgetLarge fpPerfglissanteclassique")
for result in results:
table_results = result.find_all("td")
print(table_results)
结果:
[<td>item 1</td>, <td>item 2</td>, <td>item 3</td>]
[<td>item 4</td>, <td>item 5</td>, <td>item 6</td>]
【解决方案2】:
如果表在这个类中,你可以使用这个例子来获取数据:
from bs4 import BeautifulSoup
html = """
<div class="widget widgetLarge fpPerfglissanteclassique">
<table>
<tr>
<td>1</td><td>2</td><td>3</td>
</tr>
<tr>
<td>4</td><td>5</td><td>6</td>
</tr>
</table>
</div>
"""
soup = BeautifulSoup(html, "html.parser")
results = soup.find_all(
"div", class_="widget widgetLarge fpPerfglissanteclassique"
)
for result in results: # <-- iterate every result
for row in result.find_all("tr"): # <-- find all rows
cell_data = []
for cell in row.find_all("td"): # <-- find all cells inside row
cell_data.append(cell.text)
print(*cell_data)
打印:
1 2 3
4 5 6