【问题标题】:BeautifulSoup not grabbing dynamic contentBeautifulSoup 没有抓取动态内容
【发布时间】:2020-10-24 19:55:44
【问题描述】:

我遇到的问题是我想从此页面获取相关链接:http://support.apple.com/kb/TS1538

如果我在 Chrome 或 Safari 中检查元素,我可以看到 <div id="outer_related_articles"> 和列出的所有文章。如果我尝试使用 BeautifulSoup 抓取它,它将抓取页面和所有除了相关文章。

这是我目前所拥有的:

import urllib2
from bs4 import BeautifulSoup
url = "http://support.apple.com/kb/TS1538"
response = urllib2.urlopen(url)
soup = BeautifulSoup(response.read())
print soup

【问题讨论】:

  • BeautifulSoup 只是一个解析器。我认为urlopen 更有可能是您的问题。您是否在尝试解析之前检查过是否确实包含了适当的元素?

标签: python html dynamic beautifulsoup


【解决方案1】:

此部分使用 Javascript 加载。禁用浏览器的 Javascript 以查看 BeautifulSoup 如何“看到”页面。

从这里你有两个选择:


经过一番挖掘,它似乎向该地址 (http://km.support.apple.com/kb/index?page=kmdata&requestid=2&query=iOS%3A%20Device%20not%20recognized%20in%20iTunes%20for%20Windows&locale=en_US&src=support_site.related_articles.TS1538&excludeids=TS1538&callback=KmLoader.receiveSuccess) 发出请求,并使用 JSONP 加载结果,KmLoader.receiveSuccess 是接收函数的名称。使用 Chrome 开发工具的 Firebug 更详细地检查页面。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,动态创建的 html 内容可能无法被 BeautifulSoup 捕获。一个非常基本的解决方案是让它在捕获内容之前等待几秒钟,或者使用具有等待元素然后继续的功能的 Selenium。所以对于前者,这对我有用:

    import time
    
    # .... your initial bs4 code here
    
    time.sleep(5) #5 seconds, it worked with 1 second too
    html_source = browser.page_source
    
    # .... do whatever you want to do with bs4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      相关资源
      最近更新 更多