【发布时间】:2020-05-15 02:37:51
【问题描述】:
我有一个 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 的数据。
如果我在 urls 循环中将 return 语句放在 for url 之外,它会返回第三个 URL 的数据。
如何获取列表中所有 URL 的信息?
【问题讨论】:
-
我认为
target和link会在for循环之外定义?对于循环中的每个 url,您将target和link重新定义为空列表。 -
@Andrex 如果我这样做,结果相同。你得到第一个 URL 的数据
标签: python python-3.x selenium selenium-webdriver