Webscraping: как проверить, существует ли атрибут и не продолжается ли он без завершения программы - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь создать веб-сайт, чтобы получить необходимую контактную информацию, такую ​​как мобильный телефон, электронная почта, адрес и т. Д., И т. Д.

На некоторых страницах будет вся информация ... в то время как на некоторых может быть только мобильный телефон иэлектронная почта, но не адрес ... и любая комбинация наличия / отсутствия этих полей между ...

Я играл с некоторым кодом, но не могу понять это

как мне проверитьчтобы увидеть, существует ли информация, которую я хочу, на странице (потому что она не всегда будет непротиворечивой), и если она не просто игнорирует и скребет всю «доступную» информацию, а затем продолжит работу, не нарушая код программы

, которую я пытаюсь:

if driver.find_elements_by_class_name('zsg-list_definition'):
                trial = soup.findAll('dl', {'class': 'zsg-list_definition'})
                if len(trial[0].dd.text) > 0:
                    address = trial[0].dd.text
                else:
                    address = 'None'

            if driver.find_elements_by_class_name('dont-break-out') == True:
                websiteURL = soup.find('dd', {'class': 'dont-break-out'})
                website = websiteURL.a.text
            else:
                    website = 'None'

            csv_writer.writerow([address, website])

С наилучшими пожеланиями

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

У меня достаточно опыта с этим.

Вы захотите использовать try и исключить блоки в своем коде, чтобы перехватывать ошибки, когда скребок не может что-то найти. Я также добавил блок 'else' в ваш адрес, чтобы проверить, возвращает ли len (trial [0] .dd.text) значение 0, так что для адреса все равно будет установлено значение 'None'.

try: 
     trial = soup.findAll('dl', {'class': 'zsg-list_definition'})
     if len(trial[0].dd.text) > 0:
         address = trial[0].dd.text
     else:
         address = 'None'
except:
     address = 'None'

try:
     websiteURL = soup.find('dd', {'class': 'dont-break-out'})
     website = websiteURL.a.text
except:
     website = 'None'

csv_writer.writerow([address, website])
0 голосов
/ 01 июля 2019

можно просто использовать try except:

...

try:
    address = trial[0].dd.text
except:
    address = 'None'

try:
    websiteURL = soup.find('dd', {'class': 'dont-break-out'})
    website = websiteURL.a.text
except:
    website = 'None'

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...