Я написал сценарий python, используя два условных оператора в for loop
чтобы проверить, доступен ли URL следующей страницы на определенной веб-странице. Если ссылка доступна, сценарий должен напечатать эту ссылку. Однако, если такой ссылки нет, она должна выполнить блок else
и распечатать эту строку. No link is there
.
Когда я запускаю свой нижеприведенный скрипт, он только распечатывает ссылку (которая находится внутри блока if
), когда она доступна, но когда нет такой ссылки, она никогда не выполняет блок else
и не завершает работу (также нет ошибки).
Btw, я хочу сохранить 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)
Когда нет совпадений для селектора, 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")