Python 使用BeautifulSoup使用Spry框架构建刮表

Python 使用BeautifulSoup使用Spry框架构建刮表,python,html,web-scraping,beautifulsoup,spry,Python,Html,Web Scraping,Beautifulsoup,Spry,此页面包含我要与BeautifulSoup一起废弃的表: 该表位于id为spryregion1的div中,但是它不能用id来定位,因此我用表的宽度来定位它,然后定位所有tr元素 列标题包含在th元素中,每行条目位于td中。我尝试了几种方法,但无法刮除所有行并将它们放入CSV文件中 有人能给我一些帮助/建议吗?谢谢 您要查找的表格未包含在您所请求页面的HTML中。该页面使用Javascript请求另一个包含它的HTML文档,然后使用您正在寻找的进行包装 要获取表格,您可以使用浏览器工具找到页面

此页面包含我要与BeautifulSoup一起废弃的表:

该表位于id为spryregion1的
div
中,但是它不能用id来定位,因此我用表的宽度来定位它,然后定位所有
tr
元素

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

有人能给我一些帮助/建议吗?谢谢


您要查找的表格未包含在您所请求页面的HTML中。该页面使用Javascript请求另一个包含它的HTML文档,然后使用您正在寻找的
进行包装

要获取表格,您可以使用浏览器工具找到页面请求的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')])
从那里,您可以首先通过搜索
条目提取标题行,然后迭代所有行。可以使用Python的CSV库将数据写入CSV文件

为您提供
output.csv
文件启动:

公司(制造商,如果已知),具体的大豆产地或酒吧名称,参考号,审核日期,可可百分比,公司地点,评级,大豆类型,蚕豆产地
A.莫林,玻利维亚,7972012,70%,法国,玻利维亚,3.5%
秘鲁莫林,7972012,63%,法国,3.75%,秘鲁
A.Morin,巴西,10112013,70%,法国,3.25,巴西

使用Python 3.6.3进行测试

非常感谢您的回答!我可以问一个后续问题吗?您是如何发现元素中包装了另一个HTML文档,并跟踪到此地址的:“”?非常感谢。在重新加载页面期间,我使用Firefox开发者网络工具监视XHR请求。