【问题标题】:Scrape full contents of web page抓取网页的全部内容
【发布时间】:2021-01-22 22:45:44
【问题描述】:

我正在尝试构建一个闪亮的应用程序来跟踪疫苗的进展,因为CDC page 不保留历史信息。使用 Chrome DevTools 查看页面代码,我可以看到我想从每个 <div> 标记中提取信息,类为 "card-content",我尝试使用以下代码,使用 rvest 包:

data <- read_html('https://covid.cdc.gov/covid-data-tracker/#vaccinations')
current_numbers <- data %>% html_nodes('div.card-content')

这将返回一个结构为“0 列表”的空对象。

我还使用readr::read_file 生成了一个 .txt 文件,以查看是否发生了奇怪的事情。它返回了一个带有

的文件
    <main id="maincontent">

    </main>

并且没有中间内容,尽管页眉和页脚代码似乎都在那里。

有没有更好的方法从页面上的&lt;main&gt; 内容中提取数据? rvest 是适合这个的包吗?我也可以在 Python 中尝试bs4,但不知道如何从中制作一个闪亮的应用程序。

【问题讨论】:

    标签: r web-scraping rvest


    【解决方案1】:

    网站正在处理动态内容,因此您不会以这种方式获得任何信息。

    我对@9​​87654321@ 没有那么深入,但正如你提到的pythonbs4,我可以给你一个小的工作示例。

    示例

    from selenium import webdriver
    from bs4 import BeautifulSoup
    from time import sleep
    
    driver = webdriver.Chrome(executable_path='C:\Program Files\ChromeDriver\chromedriver.exe')
    url = "https://covid.cdc.gov/covid-data-tracker/#vaccinations"
    
    driver.get(url)
    sleep(2)
    
    soup = BeautifulSoup(driver.page_source, "lxml")
    
    driver.close()
    [{'title': item.find('h4').get_text(), 'value': item.find('div').get_text()}  for item in soup.select('div.card-content')]
    

    输出

    [{'title': 'Total Doses Distributed', 'value': '37.960.000'},
     {'title': 'Total Doses Administered', 'value': '17.546.374'},
     {'title': 'Number of People Receiving 1 or More Doses',
      'value': '15.053.257'},
     {'title': 'Number of People Receiving 2 Doses', 'value': '2.394.961'},
     {'title': 'Doses Administered in Long-Term Care Facilities ',
      'value': '2.089.181'}]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-09
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      相关资源
      最近更新 更多