bodyakurbanov
@bodyakurbanov
Учусь программировать на python

Как выводить значение «None» если телефон,адрес,email не найдены на сайте?

Запустил парсер на 1000 вкладок. Гдетто через 30 минут выскочила ошибка связанная с тем что не найдет номер телефона. Как мне дописать код чтобы парсер не прекращал работу а просто выводил "None"

Вот мой код:
import requests
from bs4 import BeautifulSoup
from time import sleep
from lxml import html

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
                         " AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"}
email_list = []

def get_url():
    for count in range(0,1060,20):

        url = f"http://www.spisszkol.eu/typ/?wojewodztwo=malopolskie&powiat=krakow&start={count}"

        responce = requests.get(url, headers=headers)
        responce.encoding = "utf8"
        soup = BeautifulSoup(responce.text, "lxml")
        data = soup.find_all("div", class_="doc_entry")


        for i in data:
            card_url = i.find("a").get("href")
            yield card_url

def array():
    for list_card in get_url():
        responce = requests.get(list_card, headers=headers)
        responce.encoding = "utf8"
        sleep(3)
        soup = BeautifulSoup(responce.text, "lxml")
        parsed = html.fromstring(responce.text)
        emails = [e.attrib['title'] for e in parsed.xpath('//a[contains(@href, "email") and @title]')]
        s = " ".join(emails)
        data = soup.find("div", class_="page_body")
        name = data.find("p", class_="map_title red").text
        adres = data.find("p", itemprop="address").text
        telefon = data.find("span", itemprop="telephone").text

        yield name, adres, telefon,s
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
@dima20155
you don't choose c++. It chooses you
Очевидно, если это исключение, которое вылетает на строке
telefon = data.find("span", itemprop="telephone").text

то просто оберните строку в
try except блок
try:
    telefon = data.find("span", itemprop="telephone").text
except Exception as e:
    print(e)
    telefon = None

другой способ:
telefon = data.find("span", itemprop="telephone")
if telefon != None:
    telefon = telefon.text


Также, если это вырастет в чуть более сложное приложение, то я бы предложил написать собственный класс-обертку для data.find, чтобы не оборачивать каждый вызов поиска html кода в try except, а сразу из класса получать информацию без проблем. Дополнительным плюсом будет легкость изменения поведения данного класса (логирование, подсчет количества определенных тегов и т.д.)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы