Как получить более подробную информацию при извлечении из веб-таблицы? - PullRequest
0 голосов
/ 29 сентября 2018

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

Я использую селен и эту одну строку кода для получения данных из каждой таблицы в каждом URL.

element = wd.find_element_by_id('dags')

Итак, я ссылаюсь на таблицу, выкидываю данные и пишу всев текстовый файл.Я могу получить аналитику для множества задач, и аналитика может выглядеть так:

1 0 2 1 4 2

Проблема в том, что когда я открою файл CSV, я увижу это:

102142

Итак, все сгруппировано вместе.Есть ли лучший способ получить данные из веб-таблицы?Я думал о вытягивании элементов TR и элементов TD, но я не уверен, как это будет работать.Я могу опубликовать весь свой код здесь, если это поможет.Я просто пытаюсь все упростить.

1 Ответ

0 голосов
/ 29 сентября 2018

Предоставление вашего источника может прояснить ваш вопрос немного больше, но для примера, если бы мы собирали данные из таблицы википедии:

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

driver = webdriver.Chrome()

url = "https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(nominal)"

driver.get(url)

WebDriverWait(driver, 20).until(
     EC.presence_of_element_located((By.XPATH, """//*[@id="mw-content-text"]/div/table[2]/tbody/tr[2]/td[1]/table/tbody""")))


rankings = driver.find_elements_by_xpath("""//*[@id="mw-content-text"]/div/table[2]/tbody/tr[2]/td[1]/table/tbody/tr/td[1]""")
rankings = [x.text for x in rankings]

countries = driver.find_elements_by_xpath("""//*[@id="mw-content-text"]/div/table[2]/tbody/tr[2]/td[1]/table/tbody/tr/td[2]""")
countries = [x.text for x in countries]

gdps = driver.find_elements_by_xpath("""//*[@id="mw-content-text"]/div/table[2]/tbody/tr[2]/td[1]/table/tbody/tr/td[3]""")
gdps = [x.text for x in gdps]

data = zip(rankings, countries, gdps)

print data[:10]

результат был бы следующим:

[(u' ', u' World[19]', u'79,865,481'), (u'1', u' United States', u'19,390,600'), (u'2', u' China[n 1]', u'12,014,610'), (u'3', u' Japan', u'4,872,135'), (u'4', u' Germany', u'3,684,816'), (u'5', u' United Kingdom', u'2,624,529'), (u'6', u' India', u'2,611,012'), (u'7', u' France', u'2,583,560'), (u'8', u' Brazil', u'2,054,969'), (u'9', u' Italy', u'1,937,894')]

Как только у вас будет такая структура данных, будет легко написать в CSV или другой форме сохранения.

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...