检查美丽的soup.find_all值是否为空

时间:2017-03-05 03:09:22

标签: python loops web-scraping null beautifulsoup

再次大家好,python noob在这里。 我正在慢慢推进我的项目,但修复一个错误,导致另一个问题来临。长话短说: 我有

for tempNext in soup3.find_all(title=re.compile("^Next Page -")):

..循环,让我找到一个href值。如果值存在,它的效果很好。如果不是,它会继续重复使用前一次的同一个。遗憾的是,每次将值重置为""并不简单,因为此for循环也在另一个循环中。

只需获取IDEA,这就是代码片段的外观:

soup3 = make_soup('http://www.automotiveforums.com/vbulletin/' + link)
        while tempNumber < 4:
            for postScrape in soup3.find_all(id=re.compile("^td_post_")):
                post = ""
                post += postScrape.get_text(strip=True)
                postData += post + "\n"
                print(post)
            for tempNext in soup3.find_all(title=re.compile("^Next Page -")):
                tempNextPage = ""
                tempNextPage += (tempNext.get('href'))
                print(tempNextPage)
            soup3 = ""
            soup3 = make_soup('http://www.automotiveforums.com/vbulletin/' + tempNextPage)
            tempNumber += 1
        tempNumber = 1
    number += 1
    print(number)
    newUrl = "http://www.automotiveforums.com/vbulletin/" + nextPage
    soup = make_soup(newUrl)

所以我想知道是否有办法检查for tempNext in soup3.find_all(title=re.compile("^Next Page -")):值是否为空,如果是空的话,只需设置tempNextPage = ""但是过去几个小时我无法弄明白

如果我在循环完成后将其设置为空值,则不再刮擦其他页面。

感谢您抽出宝贵时间阅读此问题,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

tempNextPage循环之外声明-or reset- for变量,并将变量重新分配给新值 - 而不是在for循环中向其附加新值。这样,如果tempNextPage找不到任何匹配的元素,soup3.find_all()的值将保持为空,您可以根据tempNextPage是否为空来采取措施:

while tempNumber < 4:
    tempNextPage = ""
    for postScrape in soup3.find_all(id=re.compile("^td_post_")):
        ....
    for tempNext in soup3.find_all(title=re.compile("^Next Page -")):
        tempNextPage = tempNext.get('href')
        print(tempNextPage)

    # process tempNextPage only if it is not empty
    if not tempNextPage:
        soup3 = make_soup('http://www.automotiveforums.com/vbulletin/' + tempNextPage)
        ....
    # do something else otherwise
    else :
        ....