Итак, я работаю над попыткой веб-скрапа https://data.bls.gov/cgi-bin/surveymost?bls и смог выяснить, как сканировать веб-страницы с помощью кликов, чтобы попасть в таблицу.
Выбор, на котором я практикуюсь, происходит после того, как вы установите флажок, связанный с «Индекс стоимости трудоустройства (ECI) Гражданский (нескорректированный) - CIU1010000000000A» в разделе «Компенсация», а затем выберите «Получить данные».
Как только эти два обработаны, таблица показывает. Это таблица, которую я пытаюсь очистить.
Ниже приведен код, который у меня есть на данный момент.
Обратите внимание, что вы должны указать свой собственный путь к драйверу браузера, где я поместил <драйвер браузера>.
from bs4 import BeautifulSoup
from urllib.request import urlopen
import pandas as pd
import numpy as np
import requests
import lxml.html as lh
from selenium import webdriver
url = "https://data.bls.gov/cgi-bin/surveymost?bls"
ChromeSource = r"<browser driver>"
# Open up a Chrome browser and navigate to web page.
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--incognito')
options.add_argument('--headless') # will run without opening browser.
driver = webdriver.Chrome(ChromeSource, chrome_options=options)
driver.get(url)
driver.find_element_by_xpath("//input[@type='checkbox' and @value = 'CIU1010000000000A']").click()
driver.find_element_by_xpath("//input[@type='Submit' and @value = 'Retrieve data']").click()
i = 2
def myTEST(i):
xpath = '//*[@id="col' + str(i) + '"]'
TEST = driver.find_elements_by_xpath(xpath)
num_page_items = len(TEST)
for i in range(num_page_items):
print(TEST[i].text)
myTEST(i)
# Clean up (close browser once completed task).
driver.close()
В данный момент это касается только заголовков. Я хотел бы также получить содержание таблицы.
Если я сделаю i = 0, то получится «Год». я = 1, он производит «Период». Но если я выберу i = 2, я получу две переменные, которые имеют одинаковый идентификатор col2 для «оценочного значения» и «стандартной ошибки».
Я пытался придумать, как обойти это, и, похоже, не могу получить ничего, что я исследовал, для работы.
По сути, было бы лучше начать с того момента, когда я щелкнул мышью и попал на интересующую таблицу, а затем посмотреть на xpath заголовка и вытянуть текст для всех подпунктов ' с.
<tr> == $0
<th id="col0"> Year </th>
<th id="col1"> Period </th>
<th id="col2">Estimated Value</th>
<th id="col2">Standard Error</th>
<tr>
Я не уверен, как это сделать. Я также попытался l oop через {i}, но очевидно, что разделение с двумя заголовками вызывает проблему.
Как только я смогу получить заголовок, я хочу получить содержимое. Я мог бы дать вам некоторое представление о том, нахожусь ли я на правильном пути, переосмысливаю его или есть ли более простой способ сделать все это. Я учусь, и это моя первая попытка использования библиотеки селена для кликов. Я просто хочу, чтобы он работал, чтобы я мог попробовать его снова на другом столе и сделать его как можно более автоматизированным или повторно используемым (с настройкой).