当前位置: 首页 > 知识库问答 >
问题:

用Python抓取网页:非类型错误,不能抓取表的数据

阳兴朝
2023-03-14

这是我第一次尝试编码,所以请原谅我的粗鲁。我试图通过以下链接来学习网页刮刮:https://data.gov.sg/dataset/industrial-arbitry-court-arwards-by-nature-of-trade-distrates?view_id=d3e444ef-54ed-4d0b-b715-1ee465f6d882&resource_id=c24d0d00-2d12-4f68-8fc9-4121433332e0

我真的花了几个小时来弄清楚我的代码有什么问题:

import csv
import requests
from BeautifulSoup import BeautifulSoup

url = 'https://data.gov.sg/dataset/industrial-arbitration-court-awards-by-nature-of-trade-disputes?view_id=d3e444ef-54ed-4d0b-b715-1ee465f6d882&resource_id=c24d0d00-2d12-4f68-8fc9-4121433332e0'
response = requests.get(url)
html = response.content

soup = BeautifulSoup(html" target="_blank">html)
table = soup.find('tbody')

list_of_rows = []
for row in table.find('tr'):
    list_of_cells = []
    for cell in row.findAll('td'):
        list_of_cells.append()
    list_of_rows.append(list_of_cells)

outfile = open("./indarb.csv","wb")
writer = csv.writer(outfile)

然后,我的终端吐出这样的话:“nonetype”对象没有属性“find”,说第13行有一个错误。不确定它是否有助于查询,但这是我尝试的列表:

“find”/“find all”的不同排列

  • 将“.find”改为“.findall”
  • 使用了“.find”而不是“.findall”

第10行的不同排列

  • 尝试了soup.find(“tbody”)
  • 尝试了soup.find(“table”)
  • 打开源代码,尝试soup.find(“table”,attrs={“class”:“table table-condensed”})

第13行的不同排列

  • 类似地只使用'tr'标记;或
  • 尝试添加“attrs={}”内容

我真的试过了,但不明白为什么我不能刮取那个简单的10行表。如果有人能发布有效的代码,那就太棒了。谢谢你的耐心!

共有2个答案

魏煜祺
2023-03-14

您有几个错误,最大的错误是您使用了BeautifulSoup3,它已经开发多年了,您应该使用bs4,您还需要使用find_all当您想要多个标记时。此外,您还没有将cell传递给第13行的list_of_cells.append(),这是导致其他错误的原因:

from bs4 import BeautifulSoup

url = 'https://data.gov.sg/dataset/industrial-arbitration-court-awards-by-nature-of-trade-disputes?view_id=d3e444ef-54ed-4d0b-b715-1ee465f6d882&resource_id=c24d0d00-2d12-4f68-8fc9-4121433332e0%27'
response = requests.get(url)
html = response.content

soup = BeautifulSoup(html)
table = soup.find('table')

list_of_rows = []
for row in table.find_all('tr'):
    list_of_cells = []
    for cell in row.find_all('td'):
        list_of_cells.append(cell)
    list_of_rows.append(list_of_cells)

我不确定您到底想要什么,但这会从页面上的第一个表追加tds。如果你真的想要这些数据,你还可以使用和api,以及adownloadable csv。

郑声
2023-03-14

您在代码中请求的URL不是HTML而是JSON。

 类似资料:
  • 我是python新手,正在尝试从以下站点获取数据。虽然这段代码适用于不同的站点,但我无法让它适用于nextgen stats。有人想知道为什么吗?下面是我的代码和我得到的错误 下面是我得到的错误 df11=pd。读取html(urlwk1)回溯(上次调用):文件“”,第1行,在文件“C:\Users\USERX\AppData\Local\Packages\PythonSoftwareFounda

  • 在我的硕士论文中,我正在探索通过web自动化从网站中提取数据的可能性。步骤如下: 登录网站(https://www.metal.com/Copper/201102250376) 输入用户名和密码 单击登录 将日期更改为2020年1月1日 刮取生成的表格数据,然后将其保存到csv文件中 用我电脑上的特定名称保存到特定文件夹 运行相同的序列,在同一浏览器窗口的新选项卡中下载其他材料的其他历史价格数据

  • 问题内容: 我正在尝试开发一个简单的网页抓取工具。我想提取没有代码的文本。我实现了这个目标,但是我发现在某些加载了的页面中,我没有获得良好的结果。 例如,如果一些代码添加了一些文本,则看不到它,因为当我调用 我得到的原始文本没有添加文本(因为在客户端执行了)。 因此,我正在寻找一些解决此问题的想法。 问题答案: 一旦安装了,请确保二进制文件在当前路径中可用: 例 举个例子,我用以下HTML代码创建

  • 问题内容: 我想从网站上获取每天的日出/日落时间。是否可以使用Python抓取网络内容?使用什么模块?有没有可用的教程? 问题答案: 结合使用urllib2和出色的BeautifulSoup库:

  • 我想刮从多个网站与类似的网址的,如https://woollahra.ljhooker.com.au/our-team, https://chinatown.ljhooker.com.au/our-team和https://bondibeach.ljhooker.com.au/our-team. 我已经写了一个脚本,第一个网站的工作,但我不知道如何告诉它从其他两个网站刮。 我的代码: 有没有一种方

  • 问题内容: 所以,我的问题相对简单。我有一只蜘蛛在多个站点上爬行,我需要它按照我在代码中写入的顺序返回数据。它发布在下面。 结果以随机顺序返回,例如,返回29,然后28,然后30。我已经尝试将调度程序的顺序从DFO更改为BFO,以防万一这是问题所在,但这并没有改变。 问题答案: 定义在方法中使用的URL 。下载页面时,将为你的方法调用每个起始URL的响应。但是你无法控制加载时间-第一个起始URL可