使用BeautifulSoup使用Spry框架构建的刮板表

时间:2018-08-28 21:24:26

标签: python html web-scraping beautifulsoup spry

此页面包含我要用BeautifulSoup抓取的表:
Flavors of Cacao - Chocolate Database

该表位于ID为div的{​​{1}}内部,但是无法与ID一起定位,因此我以表的宽度定位它,然后定位了所有{ {1}}个元素。

printing all 'tr' elements

列标题包含在spryregion1元素中,每行条目包含在tr中。我已经尝试了几种方法,但无法抓取所有行并将它们放入CSV文件中。

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

An article I found on creating Spry Regions

1 个答案:

答案 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进行测试