卡在嵌套的for循环问题中

abc

网站通过使用两个日期过滤器(年/周)动态更改内容,而无需获取请求(在客户端异步处理)。每个过滤器选项都会生成一个包含要提取的td元素的不同page_source。

当前,我正在使用嵌套列表for循环来遍历过滤器(因此包含不同td元素的不同页面源将遍历每个页面源的内容,然后将所需的td元素附加到空列表中。

store = []

def getData():
    year = ['2015','2014']


    for y in year:
        values = y
        yearid = Select(browser.find_element_by_id('yearid'))
        fsid.select_by_value(values)


        weeks = ['1', '2']
        for w in weeks:
            value = w           
            frange = Select(browser.find_element_by_id('frange'))
            frange.select_by_value('WEEKS')
            selectElement = Select(browser.find_element_by_id('fweek'))
            selectElement.select_by_value(value)
            pressFilter = browser.find_element_by_name('submit')
            pressFilter.submit()

            #scrape data from page source 

            html = browser.page_source

            soup = BeautifulSoup(html, "lxml")


            for el in soup.find_all('td'):
                store.append(el.get_text())

到目前为止一切顺利,我有一个for循环,该循环构造了我想要的所有td元素的单个列表。

相反,我想在列表列表中存储单独的列表,每个页面源一个列表(即每个过滤器组合一个)。我可以在事实完成后做到这一点,即在第二步中,我可以根据一些条件从列表中提取项目。

但是,我可以在原始添加时执行此操作吗?就像是...

store = [[],[], [], []]

...

   counter = 0
   for el in soup.find_all('td'):
      store[counter].append(el.get_text())
   counter = counter +1 

这并不完全正确,因为它仅追加到商店列表中的第一个对象。如果我将计数器放在td for循环中,则每次td元素被迭代时,计数器都会增加,而实际上我只希望在完成对特定页面源的迭代后才增加计数器(它本身就是一个迭代)过滤器组合)。

我很沮丧,我正在尝试的可能吗?如果是这样,我应该把柜台放在哪里?还是我应该使用其他技术?

马丁·彼得斯(Martijn Pieters)

为每个过滤器组合创建一个新的列表对象,因此在for w in weeks:循环内部将您的单元格文本附加到列表,然后将由此产生的每个过滤器列表附加到store

def getData():
    store = []
    year = ['2015','2014']

    for y in year:
        # ... elided for brevity    

        weeks = ['1', '2']
        for w in weeks:
            perfilter = []
            store.append(perfilter)

            # ... elided for brevity    

            for el in soup.find_all('td'):
                perfilter.append(el.get_text())

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章