使用 BeautifulSoup 抓取使用 Spry 框架构建的 table
Scrape table built with Spry framework using BeautifulSoup
此页面包含 table 我想删除 BeautifulSoup:
Flavors of Cacao - Chocolate Database
table 位于 ID 为 spryregion1
的 div
内,但是它无法通过 ID 定位,因此我将其定位为 table,然后找到所有的 tr
元素。
列标题包含在 th
个元素中,每行条目包含在 td
中。我尝试了几种方法,但无法抓取所有行并将它们放入 CSV 文件中。
谁能给我一些help/advice?谢谢!
您要查找的 table 不包含在您请求的页面的 HTML 中。该页面使用 Javascript 请求包含它的另一个 HTML 文档,然后使用您正在寻找的 <div>
包装该文档。
要获取 table,您可以使用浏览器工具来识别页面正在请求的 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>
条目提取 header 行,然后迭代所有行。可以使用 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
测试
此页面包含 table 我想删除 BeautifulSoup:
Flavors of Cacao - Chocolate Database
table 位于 ID 为 spryregion1
的 div
内,但是它无法通过 ID 定位,因此我将其定位为 table,然后找到所有的 tr
元素。
列标题包含在 th
个元素中,每行条目包含在 td
中。我尝试了几种方法,但无法抓取所有行并将它们放入 CSV 文件中。
谁能给我一些help/advice?谢谢!
您要查找的 table 不包含在您请求的页面的 HTML 中。该页面使用 Javascript 请求包含它的另一个 HTML 文档,然后使用您正在寻找的 <div>
包装该文档。
要获取 table,您可以使用浏览器工具来识别页面正在请求的 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>
条目提取 header 行,然后迭代所有行。可以使用 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
测试