【问题标题】:How do I use Bs4 to pull similar information but from different places in DOM hierarchy?如何使用 Bs4 从 DOM 层次结构的不同位置提取类似的信息?
【发布时间】:2020-12-16 15:06:54
【问题描述】:

我正在尝试从这两个页面的一系列页面中抓取信息:

https://www.nysenate.gov/legislation/bills/2019/s240

https://www.nysenate.gov/legislation/bills/2019/s8450

我想做的是建立一个可以拉下“See Assembly Version of this Bill”文本的刮板。在上面列出的两个链接中,类是相同的,但对于一个页面,它是该类的唯一迭代,但对于另一个页面,它是第三个。

我正在尝试做这样的事情:

assembly_version = soup.select_one(".bill-amendment-detail content active > dd")
print(assembly_version)

但我不断收到None

有什么想法吗?

【问题讨论】:

  • “仅”和“第三次迭代”是什么意思?
  • 整个网站都在JS 后面,所以你得到的是None,因为BeautifulSoup 看不到动态内容。
  • Selenium 可以看到动态内容,如果你能够使用它的话。检查这个crossbrowsertesting.com/blog/how-to/…
  • @Cagri 对于第一个链接,我的意思是这个类: c-block c-bill-section c-bill--details 在 HTML 树中只出现一次。对于第二个链接,同一个班级有 4 个。(我第一次算错了。)
  • 如果问题只是@baduker 提到的BeautifulSoup doesn't see dynamic content,请尝试这样做:stackoverflow.com/questions/15866426/…

标签: python beautifulsoup


【解决方案1】:
url = "https://www.nysenate.gov/legislation/bills/2019/s11"
raw_html = requests.get(url).content
soup = BeautifulSoup(raw_html, "html.parser")

assembly_version = soup.find(class_="c-block c-bill-section c-bill--details").find("a").text.strip()
print(assembly_version)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2016-03-26
    • 2021-04-26
    相关资源
    最近更新 更多