此页面包含我要使用BeautifulSoup报废的表格: Flavors of Cacao - Chocolate Database
该表位于一个id为div
的spryregion1
内,但它不能与id一起定位,因此我将其与表的宽度定位,然后找到所有tr
元素。
列标题包含在th
元素中,每个行条目都在td
中。我尝试了几种方法,但无法刮掉所有行并将它们放入CSV文件中。
有人可以给我一些帮助/建议吗?谢谢!
您要查找的表格不包含在您请求的页面的HTML中。该页面使用Javascript来请求包含它的另一个HTML文档,然后使用您正在寻找的<div>
进行包装。
要获取该表,您可以使用浏览器工具来查找该页面请求的URL,并使用此工具获取您需要的页面:
import requests
from bs4 import BeautifulSoup
import csv
r = requests.get("http://flavorsofcacao.com/database_w_REF.html")
soup = BeautifulSoup(r.content, "html.parser")
with open('output.csv', 'w', newline='', encoding='utf-8') as f_output:
csv_output = csv.writer(f_output)
csv_output.writerow([th.get_text(strip=True) for th in soup.table.tr.find_all('th')])
for tr in soup.table.find_all("tr")[1:]:
csv_output.writerow([td.get_text(strip=True) for td in tr.find_all('td')])
从那里,您可以首先通过搜索<th>
条目提取标题行,然后迭代所有行。可以使用Python的CSV库将数据写入CSV文件。
给你一个output.csv
文件开始:
Company (Maker-if known),Specific Bean Origin or Bar Name,REF,Review Date,Cocoa Percent,Company Location,Rating,Bean Type,Broad Bean Origin
A. Morin,Bolivia,797,2012,70%,France,3.5,,Bolivia
A. Morin,Peru,797,2012,63%,France,3.75,,Peru
A. Morin,Brazil,1011,2013,70%,France,3.25,,Brazil
使用Python 3.6.3进行测试