Python 迭代url列表并使用Selenium打开每个url

Python 迭代url列表并使用Selenium打开每个url,python,python-3.x,selenium,selenium-webdriver,Python,Python 3.x,Selenium,Selenium Webdriver,我有一个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/

我有一个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)
预期的输出是一个dict,其中key:country和values:links匹配

当我运行这段代码时,它会正确执行,但不会遍历URL列表,它只打开并返回第一个URL的数据

如果我将return语句放在forurl-inurl循环之外,它将返回第三个url的数据


如何获取列表中所有URL的信息?

看起来
return
语句是在for循环中定义的。因此,由于函数在第一个循环后退出,因此预计只能获取第一个URL。也就是说,您是否尝试过@Andrex建议的方法,在for循环之外定义
target
link
,并取消
返回县、目标的缩进,使其位于主for循环之外?因此,最终的代码应该如下所示:

def get_links():
[一些代码]
数据={}
对于url中的url:
链接=[]
目标=[]
[一些代码]
数据[国家]=目标
返回数据#未插入

希望编辑后的代码能帮助您获得所需的结果。

我认为
target
link
将在for循环之外定义?。对于循环中的每个url,您都将
target
link
重新定义为空列表。@如果我这样做,将得到相同的结果。您将获得第一个URL的数据现在它将打开所有URL,但返回的数据仅与最后一个URL信息匹配。我们越来越近了!这可能是因为我们没有在函数中收集
country
信息。换言之,我们有
country=re.search(regexp,url).group()
,但我们并没有对这些信息做任何处理。因此,一种方法可能是使用字典来存储所有的{country:target}信息,如果你不确定我的意思,可以随时联系。这样更好!现在正在抓取所有URL的所有信息。我所做的是创建一个数据帧,这样我更好地阅读它。现在唯一的问题是,它将每个URL的所有目标值添加到每个列中。列:{A:来自url1、url2和url3}的链接,{B:来自url1、url2和url3}的链接;{C:url1、url2和url3的链接}太棒了!很高兴能为您提供帮助。(抱歉,在完成之前意外添加了注释)。假设您的字典看起来像
data={'gt':[url1a,url2a,…],'co':[url1b,url2b,…]}
,您可以做的是
df=pd.DataFrame.from_dict(data,orient='index')
。这样,每一行都是
国家
,每一列都是
目标
url。如果希望将URL列表保持为一列,一种方法是向所有值添加另一个
[]
,使其看起来像:
data={'gt':[[url1a,url2a,…]],'co':[[url1b,url2b,…]}