【问题标题】:IndexError at a loop with Beautifulsoup使用 Beautifulsoup 循环出现 IndexError
【发布时间】:2017-06-10 12:54:34
【问题描述】:

非常有名的IndexError。不幸的是,我真的没有找到解决方案。

最后一次访问最后一个网址,总是报错。网站是否为空。范围是2还是20都会出现这个错误。

    text_file = open("Results-from-{}.txt".format(self.entry_get), "w")

    ### Iterator for end of the url
    multiple_url = []
    for iterator_page in range(15):
            iterator_page = iterator_page + 1
            multiple_url.append("".join([self.sub_url, str(iterator_page)]))

    ### loop for visit all 20 pages ###
    parser = 0
    while parser < len(multiple_url):
        print(multiple_url[parser])
        parser += 1
        with urllib.request.urlopen(multiple_url[parser]) as url:
            soup = BeautifulSoup(url, "html.parser")

    ### html tag parsing
            names = [name.get_text().strip() for name in soup.findAll("div", {"class": "name m08_name"})]
            street = [address.get_text().strip() for address in soup.findAll(itemprop="streetAddress")]
            plz = [address.get_text().strip() for address in soup.findAll(itemprop="postalCode")]
            city = [address.get_text().strip() for address in soup.findAll(itemprop="addressLocality")]

    ### zip and write
            for line in zip(names, street, plz , city):
                print("%s;%s;%s;%s;\n" % line)
                text_file.write("%s;%s;%s;%s;\n" % line)

    ### output of the path main: cwd_out_final
    cwd = os.getcwd()
    cwd_out = "\{}".format(text_file.name)
    cwd_out_final = cwd + cwd_out


    text_file.close()

我的错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 1699, in __call__
    return self.func(*args)
  File "/Users/x/PycharmProjects/hackday/parser.py", line 55, in search_complete_inner
    with urllib.request.urlopen(multiple_url[parser]) as url:
IndexError: list index out of range

谢谢!

【问题讨论】:

  • 为什么在打开网址之前要增加parser
  • 尝试将 parser += 1 语句移动到 while 循环的末尾
  • 粗心错误..

标签: python python-3.x parsing beautifulsoup range


【解决方案1】:

在将parser 用作with 语句中的索引之前,您先递增它;在最后一个元素上这样做会产生有问题的错误。此外,这意味着您永远不会使用列表中的 first 元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2019-09-08
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2019-05-21
    相关资源
    最近更新 更多