使用BeautifulSoup使用Spry框架构建的Scrape表

问题描述 投票:0回答:1

此页面包含我要使用BeautifulSoup报废的表格: Flavors of Cacao - Chocolate Database

该表位于一个id为divspryregion1内,但它不能与id一起定位,因此我将其与表的宽度定位,然后找到所有tr元素。

printing all 'tr' elements

列标题包含在th元素中,每个行条目都在td中。我尝试了几种方法,但无法刮掉所有行并将它们放入CSV文件中。

有人可以给我一些帮助/建议吗?谢谢!

An article I found on creating Spry Regions

python html web-scraping beautifulsoup spry
1个回答
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进行测试

© www.soinside.com 2019 - 2024. All rights reserved.