【问题标题】:.find() returning none when web scraping - BeautfiulSoup Python.find() 网页抓取时不返回任何内容 - BeautfiulSoup Python
【发布时间】:2020-08-27 14:04:27
【问题描述】:

网页:https://fbref.com/en/comps/9/gca/Premier-League-Stats

我已经刮掉了第一张桌子,现在我正试图刮掉第二张桌子。

import requests
from bs4 import BeautifulSoup

URL = 'https://fbref.com/en/comps/9/gca/Premier-League-Stats'
page = requests.get(URL)


soup = BeautifulSoup(page.content, 'html.parser')


stepa= soup.find(id="all_stats_gca")

以上工作正常,但我不能再进一步了? 我原以为下一步会是

stepb=stepa.find("div",{"class":"table_outer_container"})

但是在打印时返回无。还有其他建议吗?

【问题讨论】:

  • 在快速检查了该页面的源代码后,我没有在 id 为 all_stats_gca 的 div 内看到任何具有名为 table_outer_container 的类的 div
  • 也许你想要id为all_stats_gca_squads的div
  • 很确定它在那里,虽然有一点点下降,不,我用all_stats_gca_squads作为我刮@revliscano的第一张桌子
  • 哦,是的,对。问题是你感兴趣的内容被评论了。我检查了他们是否在该 div 中添加了一个名为 commented 的类。他们必须这样做是为了保护他们的数据。您可以通过打开源代码 (CTRL + U) 来查看这一点,而不是检查 devtools 中的元素。
  • 是的,我确认他们的 js 文件中有一个函数来显示评论的内容。我必须说,他们很好地保护了他们。将来会牢记这一点

标签: python web-scraping beautifulsoup


【解决方案1】:

正如我在 cmets 中所说,您尝试解析的页面的问题是他们使用类 table_outer_container 注释了 div,因此当您调用 find() 方法时,您将得到 None . (stepa 的结果集中忽略了注释的 div)。

现在,(基于this answer)作为一种解决方法,您可以执行以下操作来获取该评论的 div:

stepb = stepa.find_all(string=lambda text: isinstance(text, Comment))
comment_content = stepb[0].extract().replace('\n', ' ').replace('\t', ' ')
new_soup = BeautifulSoup(comment_content, 'html.parser')

table_outer_container = new_soup.find("div",{"class":"table_outer_container"})

【讨论】:

    猜你喜欢
    • 2021-11-25
    • 2019-04-27
    • 2020-02-17
    • 2021-07-28
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    相关资源
    最近更新 更多