Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用selenium和Beauty soup刮取隐藏的类数据_Python_Selenium_Web Scraping_Beautifulsoup_Screen Scraping - Fatal编程技术网

Python 如何使用selenium和Beauty soup刮取隐藏的类数据

Python 如何使用selenium和Beauty soup刮取隐藏的类数据,python,selenium,web-scraping,beautifulsoup,screen-scraping,Python,Selenium,Web Scraping,Beautifulsoup,Screen Scraping,我正在尝试抓取支持java脚本的网页内容。我需要提取该网站表格中的数据。但是,表的每一行都有按钮(箭头),通过该按钮我们可以获得该行的附加信息 我需要提取每行的附加描述。通过检查发现,每行箭头的内容属于同一类。但是,该类隐藏在源代码中。只有在检查时才能观察到。我试图稀疏的数据来自 我用了硒和漂亮的汤。我能够抓取表中的数据,但不能抓取表中箭头的内容。我的python将返回该箭头类的空列表。但是用于普通表数据的类 from bs4 import BeautifulSoup from selenium

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

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

我用了硒和漂亮的汤。我能够抓取表中的数据,但不能抓取表中箭头的内容。我的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)

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

element = driver.find_elements(By.XPATH, '//button')
对于您的具体情况,您还可以使用:

element = driver.find_elements(By.CSS_SELECTOR, 'button[class|="sc"]')
获得按钮元素后,我们可以执行以下操作:

element.click()

在此之后对页面进行解析应该会得到您正在查找的javascript生成的内容

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

element = driver.find_elements(By.XPATH, '//button')
对于您的具体情况,您还可以使用:

element = driver.find_elements(By.CSS_SELECTOR, 'button[class|="sc"]')
获得按钮元素后,我们可以执行以下操作:

element.click()

在此之后对页面进行解析应该会得到您正在查找的javascript生成的内容。要打印隐藏数据,可以使用以下示例:

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()))

要打印隐藏数据,可以使用以下示例:

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()))

非常感谢你的代码。您能否指定您是如何找到data_url的第二部分的,以便将来帮助我解决类似的问题。@Praneth当我查看页面的源代码时,找不到数据,因此我在其他文件中查找了页面加载的位置。我在Js文件中找到了它们(通过Firefox开发工具,但Chrome也有类似的功能)。您能否指定您是如何找到data_url的第二部分的,以便将来帮助我解决类似的问题。@Praneth当我查看页面的源代码时,找不到数据,因此我在其他文件中查找了页面加载的位置。我在Js文件中找到了它们(通过Firefox开发工具,但Chrome也有类似的功能)。