【问题标题】:How to scrape hidden class data using selenium and beautiful soup如何使用 selenium 和美丽的汤刮掉隐藏的类数据
【发布时间】:2020-10-10 00:39:10
【问题描述】:

我正在尝试抓取启用了 java 脚本的网页内容。我需要在该网站的表格中提取数据。然而,表格的每一行都有按钮(箭头),我们可以通过它获得该行的附加信息。

我需要提取每一行的附加描述。通过检查可以看出,每一行的那些箭头的内容属于同一类。但是,该类隐藏在源代码中。只有在检查时才能观察到。我试图稀疏的数据来自webpage

我用过硒和美丽的汤。我能够抓取表格的数据,但不能抓取表格中那些箭头的内容。我的 python 正在为该箭头的类返回一个空列表。但适用于普通表数据的类。

from bs4 import BeautifulSoup
from selenium import webdriver

browser = webdriver.Firefox()
browser.get('https://projects.sfchronicle.com/2020/layoff-tracker/')
html_source = browser.page_source  
soup = BeautifulSoup(html_source,'html.parser')
data = soup.find_all('div',class_="sc-fzoLsD jxXBhc rdt_ExpanderRow")
print(data.text)

【问题讨论】:

    标签: python selenium web-scraping beautifulsoup screen-scraping


    【解决方案1】:

    要打印隐藏数据,可以使用这个例子:

    import re
    import json
    import requests
    from bs4 import BeautifulSoup
    
    
    url = 'https://projects.sfchronicle.com/2020/layoff-tracker/'
    soup = BeautifulSoup(requests.get(url).content, 'html.parser')
    data_url = 'https://projects.sfchronicle.com' + soup.select_one('link[href*="commons-"]')['href']
    
    data = re.findall(r'n\.exports=JSON\.parse\(\'(.*?)\'\)', requests.get(data_url).text)[1]
    data = json.loads(data.replace(r"\'", "'"))
    
    # uncomment this to see all data:
    # print(json.dumps(data, indent=4))
    
    for d in data[4:]:
        print('{:<50}{:<10}{:<30}{:<30}{:<30}{:<30}{:<30}'.format(*d.values()))
    

    打印:

    Company                                           Layoffs   City                          County                        Month                         Industry                      Company description           
    Tesla (Temporary layoffs. Factory reopened)       11083     Fremont                       Alameda County                April                         Industrial                    Car maker                     
    Bon Appetit Management Co.                        3015      San Francisco                 San Francisco County          April                         Food                          Food supplier                 
    GSW Arena LLC-Chase Center                        1720      San Francisco                 San Francisco County          May                           Sports                        Arena vendors                 
    YMCA of Silicon Valley                            1657      Santa Clara                   Santa Clara County            May                           Sports                        Gym                           
    Nutanix Inc. (Temporary furlough of 2 weeks)      1434      San Jose                      Santa Clara County            April                         Tech                          Cloud computing               
    TeamSanJose                                       1304      San Jose                      Santa Clara County            April                         Travel                        Tourism bureau                
    San Francisco Giants                              1200      San Francisco                 San Francisco County          April                         Sports                        Stadium vendors               
    Lyft                                              982       San Francisco                 San Francisco County          April                         Tech                          Ride hailing                  
    YMCA of San Francisco                             959       San Francisco                 San Francisco County          May                           Sports                        Gym                           
    Hilton San Francisco Union Square                 923       San Francisco                 San Francisco County          April                         Travel                        Hotel                         
    Six Flags Discovery Kingdom                       911       Vallejo                       Solano County                 June                          Entertainment                 Amusement park                
    San Francisco Marriott Marquis                    808       San Francisco                 San Francisco County          April                         Travel                        Hotel                         
    Aramark                                           777       Oakland                       Alameda County                April                         Food                          Food supplier                 
    The Palace Hotel                                  774       San Francisco                 San Francisco County          April                         Travel                        Hotel                         
    Back of the House Inc                             743       San Francisco                 San Francisco County          April                         Food                          Restaurant                    
    DPR Construction                                  715       Redwood City                  San Mateo County              April                         Real estate                   Construction                  
    
    ...and so on.
    

    【讨论】:

    • 非常感谢您的代码。您能否具体说明您是如何找到 data_url 的第二部分的,以便将来帮助我解决类似的情况。
    • @Praneeth 当我查看页面的源代码时,我找不到数据,所以我查看了页面加载的其他文件。我在 Js 文件中找到了它们(通过 Firefox 开发者工具,但 Chrome 有类似的东西)。
    【解决方案2】:

    您感兴趣的内容是在您单击按钮时生成的,因此您希望找到该按钮。一百万种方法可以做到这一点,但我会建议如下:

    element = driver.find_elements(By.XPATH, '//button')
    

    对于您的具体情况,您也可以使用:

    element = driver.find_elements(By.CSS_SELECTOR, 'button[class|="sc"]')
    

    一旦你得到了按钮元素,我们就可以这样做了:

    element.click()
    

    在此之后解析页面应该会为您提供您正在寻找的 javascript 生成的内容

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-15
      • 2014-05-28
      • 2020-12-13
      • 2019-03-13
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多