【问题标题】:Python loop not breaking as it should after using counter使用计数器后,Python循环没有中断
【发布时间】:2019-03-02 19:03:53
【问题描述】:

我在下面的代码末尾添加了一个计数器。但是,当代码继续运行超过 10 的计数器时,我将其设置为中断。无法弄清楚我做错了什么。

chromedriver='C:\\Users\\user\\Downloads\\chromedriver_win32\\chromedriver.exe'

options=webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1200x600')
browser=webdriver.Chrome(executable_path=chromedriver,chrome_options=options)

path='C:/Users/something.xlsx'

xls=pd.read_excel(path)
data=xls["companyname"].tolist()
data=[w.replace('" "','+') for w in data]

book=openpyxl.load_workbook(path)
sheet=book.active
try:
    delete=book['Python Data']
    book.remove(delete)
except Exception:
    pass
book.create_sheet('Python Data')
ws1=book['Python Data']
book.save(path)

counter=0

while data:
    for item in data:
        browser.get('https://duckduckgo.com/?q='+item+'&t=h_')
        results = browser.find_elements_by_id('links')
        num_page_items = len(results)
        for i in range(num_page_items):
            mylist = results[i].text
            row=len(ws1['A']) + 1
            ws1.cell(row=1,column=1,value="Results")
            ws1.cell(row=row,column=1,value=mylist)
            book.save(path)
            counter += 1
            print(counter)
            if counter==10:
                break

【问题讨论】:

  • 你为什么使用while data?我认为这打破了你的逻辑。
  • 我从这里借了一大段代码:stackoverflow.com/questions/46771995/…。但是,我还需要将搜索词列表提供给 duckduck go url,并且我发现了一些其他代码(不记得在哪里),我认为这些代码可以让我这样做。它包括while循环,但我想我在将它用于我的特定代码时误入歧途。可以建议如何正确提供网址,同时避免任何愚蠢的循环错误?

标签: python loops counter break


【解决方案1】:

由于无限的while data 语句,您的代码在到达counter == 10 后再次执行。请注意,break 不会在此处转义 while 语句,它会转义 for i in range(num_page_items)

请使用以下代码:

# notice lack of while data statement
for item in data:
    browser.get('https://duckduckgo.com/?q='+item+'&t=h_')
    results = browser.find_elements_by_id('links')
    num_page_items = len(results)
    for i in range(num_page_items):
        mylist = results[i].text
        row=len(ws1['A']) + 1
        ws1.cell(row=1,column=1,value="Results")
        ws1.cell(row=row,column=1,value=mylist)
        book.save(path)
        counter += 1
        print(counter)
        if counter==10:
            break

【讨论】:

    【解决方案2】:

    4.4. break and continue Statements, and else Clauses on Loops中所写:

    break 语句,就像在 C 中一样,跳出 最内层的封闭 forwhile 循环。

    在您的代码中是:

    for i in range(num_page_items):
         .....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-03
      • 2010-11-02
      • 2020-11-29
      • 1970-01-01
      • 2016-01-21
      • 2017-03-19
      • 1970-01-01
      • 2017-03-05
      相关资源
      最近更新 更多