Selenium Python Извлечение текста - PullRequest
0 голосов
/ 08 мая 2018

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

Вот мой код:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

capabilities = webdriver.DesiredCapabilities().FIREFOX
capabilities["marionette"] = True
binary = FirefoxBinary("C:/PATH/Mozilla Firefox/firefox.exe")
driver = webdriver.Firefox(firefox_binary=binary, capabilities=capabilities, executable_path="geckodriver.exe")
driver.get("https://www.iparkit.com/Minneapolis")
content = driver.page_source

Я хотел бы извлечь адреса, которые находятся на боковой панели. Вот попытка получить адреса:

address = driver.find_element_by_class_name('sidebar')
address.text


' SORT BY DISTANCE\n SORT BY PRICE\nLooking For A Specific Event?\nBUY\n1\nGateway Garage\n\n400 S 3rd Street\nMinneapolis, MN 55415\n 3 mins | Walk Distance\n (612) 338-2643\n$8.00\nBUY\n2\nGovernment Center Garage\n\n415 South 5th Street\nMinneapolis, MN 55415\n 5 mins | Walk Distance\n (612) 338-2643\n$13.00\nBUY\n3\n517 MARQUETTE\n\n517 MARQUETTE AVE\nMINNEAPOLIS, MN 55402\n 6 mins | Walk Distance\n (612) 746-3045\n$14.00\nBUY\n4\nMidtown Garage\n\n11 South 4th St.\nMinneapolis, MN 55402\n 7 mins | Walk Distance\n (612) 333-3940\n$13.00\nBUY\n5\nCentre Village Garage\n\n700 5th Avenue South\nMinneapolis, MN 55415\n 8 mins | Walk Distance\n (612) 338-2643\n$11.00\nBUY\n6\nGaviidae Commons Garage\n\n61 South 6th Street\nMinneapolis, MN 55402\n 8 mins | Walk Distance\n\n$15.00\nBUY\n7\nMarTen\n\n921 Marquette Avenue\nMinneapolis, MN 55402\n 13 mins | Walk Distance\n (612) 334-3498\n$9.00\nBUY\n8\nLoring Garage\n\n1300 Nicollet Mall\nMinneapolis, MN 55403\n 21 mins | Walk Distance\n (612) 338-2643\n$7.00'

Как бы я поступил так, чтобы получить следующий результат:

400 S 3rd Street
415 South 5th Street
517 MARQUETTE AVE
...

1 Ответ

0 голосов
/ 08 мая 2018

Почему вы используете address = driver.find_element_by_class_name('sidebar') - это причина, по которой вы получаете много нежелательного текста в вашем коде.

Текст, который вы хотите получить, отображается в div, который является результатом повторителя - поскольку страница является угловой страницей.

<div ng-show=" ! searchInProgress" ng-repeat="result in results track by result.id" ng-click="goToLocation(result)" class="module shade mar-15-bot ng-scope" style="cursor: pointer;"> 

Вы, вероятно, должны сделать что-то подобное - не уверен, что код будет точным

get_all_divs = self.driver.find_elements_by_css_selector('.module.shade.mar-15-bot.ng-scope')

Это даст вам все дивы внутри данного повторителя. Теперь нужный вам текст находится внутри первого div в теге p.

for i in get_all_divs:
   print i.find_element_by_css_selector('div > p').text

Вы попадаете внутрь element с классом, а затем внутри него вы получаете непосредственный дочерний элемент div, тег p и текст внутри него.

Немного устарел с Python, поэтому вам, возможно, придется внести изменения в цикл for, который я написал.

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