Веб чистит стол и не может найти стол - PullRequest
0 голосов
/ 26 ноября 2018

Я очищаю этот сайт: https://www.misoenergy.org/markets-and-operations/market-reports/market-report-archives/#nt=%2FMarketReportType%3ABids%2FMarketReportName%3AArchived%20Cleared%20Bids%20%20(zip)&t=10&p=0&s=FileName&sd=desc

И попробуйте загрузить все zip-файлы из таблицы.Тем не менее, я не могу найти стол из «супа».Ничего не возвращает.

req = Request(
    'https://www.misoenergy.org/markets-and-operations/market-reports/market-report-archives/#nt=%2FMarketReportType%3ABids%2FMarketReportName%3AArchived%20Cleared%20Bids%20%20(zip)&t=10&p=0&s=FileName&sd=desc',
     headers={'User-Agent': 'Mozilla/5.0'})
page = urlopen(req).read()
soup = BeautifulSoup(page, "html.parser")
tables = soup.find('div', class_='table table-bordered docnav-metadata dataTable no-footer')

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Чтобы извлечь табличное содержимое с этой веб-страницы с помощью библиотеки Requests-HTML, вы можете попробовать следующий скрипт:

import requests_html

link = "https://www.misoenergy.org/markets-and-operations/market-reports/market-report-archives/#nt=%2FMarketReportType%3ABids%2FMarketReportName%3AArchived%20Cleared%20Bids%20%20(zip)&t=10&p=0&s=FileName&sd=desc"

with requests_html.HTMLSession() as session:
    r = session.get(link)
    r.html.render(sleep=5,timeout=8)
    for items in r.html.find("table.dataTable tr.desktop-row"):
        data = [item.text for item in items.find("td")]
        print(data)
0 голосов
/ 26 ноября 2018

, как указано, вам нужно что-то вроде селена, чтобы загрузить страницу как динамическую.Вам также нужно подождать, пока он загрузится, чтобы получить таблицу.

ПРИМЕЧАНИЕ. Я использовал time.sleep () для ожидания, но я прочитал, что это не лучшее решение.Предлагается использовать WebDriverWait, но я все еще нахожусь в процессе понимания того, как это будет работать, поэтому обновлю его, как только я поиграю.Тем временем, это должно начать вас.

import bs4 
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('https://www.misoenergy.org/markets-and-operations/market-reports/market-report-archives/#nt=%2FMarketReportType%3ABids%2FMarketReportName%3AArchived%20Cleared%20Bids%20%20(zip)&t=10&p=0&s=FileName&sd=desc')


time.sleep(5)    

html = driver.page_source
soup = bs4.BeautifulSoup(html,'html.parser')

tables = soup.findAll('table', {'class':'table table-bordered docnav-metadata dataTable no-footer'})

Это сработало для меня с WebDriverWait:

import bs4 
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get('https://www.misoenergy.org/markets-and-operations/market-reports/market-report-archives/#nt=%2FMarketReportType%3ABids%2FMarketReportName%3AArchived%20Cleared%20Bids%20%20(zip)&t=10&p=0&s=FileName&sd=desc')

WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "table.table-bordered.docnav-metadata.dataTable.no-footer")))

html = driver.page_source
soup = bs4.BeautifulSoup(html,'html.parser')

tables = soup.findAll('table', {'class':'table table-bordered docnav-metadata dataTable no-footer'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...