python - 如何使用 Selenium 和 BeautifulSoup 进行 for 循环

标签 python selenium for-loop web-scraping beautifulsoup

我有一个字符串列表,我想通过循环迭代它们。但是,我不确定如何为此任务创建 for 循环。该函数从网站上抓取信息。这些表有数万行,具体取决于“名称”。我怎样才能做到这一点?

我有 list :

list = ['name1', 'name2', 'name3']

这是我的代码:

import selenium
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import selenium.webdriver as webdriver
import pandas as pd
import time
from bs4 import BeautifulSoup

def get_results(search_term):
        global df
        url = "https://investor.dn.no/#!/NorgesAksjer/"       
        browser = webdriver.Chrome("C:/Users/Downloads/chromedriver.exe"))
        browser.get(url)
        search_box = browser.find_element_by_id("ar-search-input")
        search_box.send_keys(search_term)
        browser.find_element_by_css_selector(".btn.btn-lg.btn-primary").click()
        WebDriverWait(browser, 5).until(EC.element_to_be_clickable((By.LINK_TEXT, search_term))).click()
        WebDriverWait(browser, 5).until(EC.element_to_be_clickable((By.XPATH,  
                     "//*[@id='dninvestor-content']/div[1]/div/div[1]/div[2]/div[2]/div[1]/div[3]/div/div[2]/div/div[1]/a"))).click() # 
        WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, 
                     "//*[@id='dninvestor-content']/div[1]/div/div[1]/div[2]/div[2]/div[1]/div[3]/div/div[2]/div/table/tbody/tr[101]/td[1]/a"))).click() 
        time.sleep(5)
        result = []
        html = browser.page_source
        soup = BeautifulSoup(html, 'html.parser')
            for posts in soup.findAll('div',{'class':'col-xs-12 ng-scope'}):
                for tr in posts.findAll('tr')[1:]:
                    sh = [td for td in tr.stripped_strings]
                    result.append(list(sh))
                    df = pd.DataFrame(result)
        return result

我想创建一个 for 循环,使得 get_results(list) 为:

get_results('name1')
get_results('name2')
get_results('name3')

结果将附加到df

最佳答案

我会做如下的事情:

final_result = []
names = ['name1', 'name2', 'name3']
for name in names:
    final_result.append(get_results(name))

如何转换为数据帧实际上取决于您正在构建的结构。

如果您的函数返回一个列表,您可以在 Final_result 中构建一个列表列表,然后使用 pd.DataFrame 转换为数据帧。

关于python - 如何使用 Selenium 和 BeautifulSoup 进行 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55640683/

相关文章:

python - 在View中访问Django Form报错信息

python - 如何在 Cython 中包装匿名枚举并为其命名?

当某些线程创建 Webdriver 时 Python Selenium 失败

selenium.common.exceptions.NoSuchElementException 在 python 3.7 中使用 selenium

matlab - 按行 "ismember"无 for 循环

Python 获取 http 预告片

java - Selenium 和 Java 尝试在表格单元格 <td> 内查找 <select> 标记

java - 为什么我在索引 = -2147483648 (= Integer.MIN_VALUE) 处收到 IndexOutOfBoundsException?

objective-c - 哪个代码块是 'better' ?

python - 找到最大的非重叠区间