【问题标题】:Finding first row of a table with Beautiful Soup用 Beautiful Soup 查找表的第一行
【发布时间】:2021-02-28 10:34:36
【问题描述】:

我正在做一项课堂作业。我需要写一些东西来返回这个网页上表格的第一行(Barr v. Lee)行:https://www.supremecourt.gov/opinions/slipopinion/19

我看到了其他一些人可能认为类似的问题。但他们看起来不像是在回答我同样的问题。大多数其他问题看起来已经摆在桌面上,而不是已经从网站上拉下来了。

或者,也许我只是看不到相似之处。我已经刮了大约一个星期了。

现在,我正在尝试构建一个循环,该循环将使用增量计数器遍历所有 div 元素,并让计数器返回一个数字,该数字告诉该行的 div 是什么,以便我可以深入了解它。

这是我目前所拥有的:

for divs in soup_doc:
div_counter = 0
soup_doc.find_all('div')[div_counter]
div_counter = div_counter + 1
print(div_counter)

但现在,它只返回1,我知道这是不对的。我应该怎么做才能解决这个问题?或者有没有更好的方法来获取这些信息?

我的输出应该是:

63
7/14/20
20A8
Barr v. Lee

PC
591/2

【问题讨论】:

标签: python beautifulsoup


【解决方案1】:

要获取第一行,您可以使用 CSS 选择器.in tr:nth-of-type(2) td

import requests
from bs4 import BeautifulSoup

URL = "https://www.supremecourt.gov/opinions/slipopinion/19"

soup = BeautifulSoup(requests.get(URL).content, "html.parser")

for tag in soup.select('.in tr:nth-of-type(2) td'):
    print(tag.text)

输出:

63
7/14/20
20A8
Barr v. Lee
 
PC
591/2

【讨论】:

  • 好消息是您可以在浏览器的开发工具中调整 CSS 选择器。恕我直言,使用 find API 只会让事情变得更加困难。
【解决方案2】:

在您的示例中,div_counter = 0 必须像这样放在循环前面:

div_counter = 0
for divs in soup_doc:
  soup_doc.find_all('div')[div_counter]
  div_counter = div_counter + 1
  print(div_counter)

您总是得到1,因为您在每次迭代开始时在for循环内部将div_counter设置为0,而不是添加1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 2017-05-31
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多