Web Scraping无法获得所有表格 - python

我编写的代码使用BeautifulSoup和Selenium取得了表格。

但是,仅获得表的一部分。汤对象不会获得访问website时未出现的行和列。

我确定问题出在摘录WebDriverWait(driver, 10).until (EC.visibility_of_element_located((By.ID,"contenttabledivjqxGrid")))

...我尝试了其他几种选择,但是没有一个给我预期的结果(即在我使用Selenium更改日期之前加载该表的所有行和列)。

Web Scraping无法获得所有表格 - python

遵循代码:

import os
import time
from selenium import webdriver
from bs4 import BeautifulSoup

​from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.options import Options

# Escolhe o driver Firefox com Profile e Options
driver = webdriver.FirefoxProfile()
driver.set_preference('intl.accept_languages', 'pt-BR, pt')
driver.set_preference('browser.download.folderList', '2')
driver.set_preference('browser.download.manager.showWhenStarting', 'false')
driver.set_preference('browser.download.dir', 'dwnd_path')
driver.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/octet-stream,application/vnd.ms-excel')

options = Options()
options.headless = False

driver = webdriver.Firefox(firefox_profile=driver, options=options)

# Cria um driver

site = 'http://mananciais.sabesp.com.br/HistoricoSistemas'
driver.get(site)


WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,"contenttabledivjqxGrid")))
soup = BeautifulSoup(driver.page_source, 'html.parser')

# Cabeçalho
header = soup.find_all('div', {'class': 'jqx-grid-column-header'})
for i in header:
    print(i.get_text())


# Seleciona as relevantes
head = []
for i in header:
    if i.get_text().startswith(('Represa', 'Equivalente')):
        print('Excluído: ' + i.get_text())
    else:
        print(i.get_text())
        head.append(i.get_text())

print('-'*70)
print(head)
print('-'*70)
print('Número de Colunas: ' + str(len(head)))

# Valores
data = soup.find_all('div', {'class': 'jqx-grid-cell'})
values = []
for i in data:
    print(i.get_text())
    values.append(i.get_text())


import numpy as np
import pandas as pd

# Convert data to numpy array
num = np.array(values)

# Currently its shape is single dimensional
n_rows = int(len(num)/len(head))
n_cols = int(len(head))
reshaped = num.reshape(n_rows, n_cols)

# Construct Table
pd.DataFrame(reshaped, columns=head)

我只是一个水文学家,想要获取这些水库数据。有人可以帮助我吗?

现在,我的结果表是这样的:

Web Scraping无法获得所有表格 - python

参考方案

我刚刚检查了网站。在Firefox中,如果转到“开发人员工具”>“网络”,并且检查名称为“ 0”的文件,您会注意到该文件的响应是一个JSON文件,其中包含所需的所有信息(图1)。为了获得此信息,您将必须遵循请求标头(图片2)

图片1:请求响应

Web Scraping无法获得所有表格 - python

图2:请求标头

Web Scraping无法获得所有表格 - python

您将需要使用这些标头向网站执行“ GET”请求,并且响应(如果接受)将是包含所有数据的JSON。请记住,某些请求可能会要求一个Cookie标头,在执行该请求之前需要先获取该标头。

我不太了解Beatutiful汤,但是我知道这可以通过Scrapy或Request Library来实现。我很确定这将为您指明正确的方向。

python web.py异步执行外部程序 - python

我有一个内置的cherrypy服务器上运行的web.py应用程序。我想在用户发布到url时执行一个外部脚本,该脚本将在python子进程的后台运行.Popen调用和web.py将重定向到另一个页面,在该页面中使用jquery监视脚本的进度ajax请求。但是我无法在这里正确实现。代码段如下,如果需要,我可以提供更多信息。 import web from mul…

使用python请求进行网页爬取 - python

我想抓取https://sparrow.eoffice.gov.in/IPRSTATUS/IPRFiledSearch并下载截至日期显示在搜索结果中的整套PDF文件(例如2016年1月1日)。员工字段是可选的。单击搜索后,该网站将列出所有员工的列表。我无法使用python请求获取post方法。持续收到405错误。我的代码如下from bs4 import B…

Selenium Web Driver访问Jquery中的Javascript全局变量 - javascript

我正在尝试使用Selenium在Python中运行功能测试,我想在某个页面上声明的Javascript中检索全局变量的值。通常,browser.execute_script("return globalVar;")可以正常工作,但是在$(document).ready(function(){中声明了该变量,Selenium无法找到它。因此…

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…