此页面包含我要用BeautifulSoup抓取的表:
Flavors of Cacao - Chocolate Database
该表位于ID为div
的{{1}}内部,但是无法与ID一起定位,因此我以表的宽度定位它,然后定位了所有{ {1}}个元素。
列标题包含在spryregion1
元素中,每行条目包含在tr
中。我已经尝试了几种方法,但无法抓取所有行并将它们放入CSV文件中。
有人可以给我一些帮助/建议吗?谢谢!
答案 0 :(得分:0)
您要查找的表未包含在您所请求页面的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进行测试