Условные утверждения странно действуют в моем скребке

1

Я написал сценарий 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)
Теги:
python-3.x
web-scraping
if-statement

1 ответ

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")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню