Переберите список URL и откройте каждый URL с помощью Selenium - PullRequest
0 голосов
/ 29 января 2020

У меня есть список URL-адресов, которые мне нужно открыть с помощью selenium, выполнить скрипт и извлечь определенные ссылки.

Что я уже сделал:

import re
from selenium import webdriver

###  Variables  ###

regexp = re.compile(r'\.[\.a-z]?[\.a-z]?\/')


###  Function  ###

def get_links():

    driver = webdriver.Firefox(executable_path=r'/usr/local/bin/geckodriver')
    urls = ['https://www.url1.com.gt/', 'https://www.url2.com.co/', 'https://www.url3.com.pe']

    for url in urls:

        links = []
        target = []

        country = re.search(regexp, url).group()

        driver.get(url)
        driver.execute_script('return document.documentElement.outerHTML')

        hrefs = driver.find_elements_by_xpath('//a[@href]')

        for href in hrefs:

            links.append(href.get_attribute('href'))

        for link in links:

            if 'string to check' in link:
                target.append(link)

        return country, target


country, target = get_links()
df = {country: target}
print(df)

ожидаемый результат - это диктат с ключом: страна и значения: ссылки, которые совпадают.

Когда я запускаю этот код, он выполняется правильно, но не перебирает список URL-адресов, он только открывает и возвращает данные первого URL.

Если я помещу инструкцию return вне URL-адреса для URL в l oop, он возвращает данные третьего URL-адреса.

Как получить информацию о все URL в моем списке?

1 Ответ

0 голосов
/ 29 января 2020

Похоже, оператор return определен в пределах для l oop. В результате ожидается, что вы получите только первый URL, поскольку функция завершается после первого l oop. Тем не менее, вы пробовали то, что предложил @Andrex, определив target и link вне для l oop и отменив отступ для return county, target, чтобы он находился вне основного для l oop? Таким образом, окончательный код должен выглядеть примерно так:

def get_links():
    [SOME CODE]

    data = {}

    for url in urls:
        links = []
        target = []

        [SOME CODE]

        data[country] = target

    return data # Unindented

Надеюсь, этот отредактированный код поможет вам получить желаемые результаты.

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