条件语句在我的刮刀中很奇怪

时间:2018-06-14 22:01:24

标签: python python-3.x if-statement web-scraping

我在for loop中使用两个条件语句编写了一个python脚本,以检查某个网页中是否有下一个页面网址。如果链接可用,则脚本应该打印该链接。但是,如果没有此类链接,则应执行else块并打印此行No link is there

当我运行我的下面的脚本时,它只在可用时打印链接(在if块内),但是当没有这样的链接时,它永远不会执行else块并退出(否)还有错误)。

顺便说一句,我希望保留for loop并让我的脚本在else块内打印语句。我怎么能这样做?

这是剧本:

import requests
from bs4 import BeautifulSoup

keyword = ["coffee","uranium"] #the keyword uranium when gets passed to the function it is supposed to execute the else block
url = "https://www.yelp.com/search?find_desc={}&find_loc=San+Francisco"

def check_link(link,query):
    res = requests.get(link.format(query))
    soup = BeautifulSoup(res.text,"lxml")
    for link in soup.select(".pagination-links .next"):
        if link:
            print(link.get("href"))

        else:
            print("No link is there")

if __name__ == '__main__':
    for item in keyword:
        check_link(url,item)

1 个答案:

答案 0 :(得分:2)

如果选择器不匹配,soup.select()将返回一个空列表。没有什么可以循环,所以你永远不会到if。它不会返回包含任何None元素的列表。

您应该测试它返回的列表的长度:

links = soup.select(".pagination-links .next")
if links:
    for link in links:
        print(link.get("href"))
else:
    print("No link is there")