Python: Как я могу проверить, содержит ли элемент в списке строку в выражении elif, где должны быть выполнены два условия? - PullRequest
0 голосов
/ 09 марта 2019

Я делаю скребок в python, который выполняет поиск, затем открывает каждую ссылку в поиске и составляет список всего в сильном теге.

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

Код работает, но громоздкий, и я пытаюсь создать чистый код.

    for a in addr:
        driver.get(a)
        print(a)

        WebDriverWait(driver, 60).until(EC.presence_of_element_located((By.ID, "_errorElement_")))
        html = driver.page_source
        soup = BeautifulSoup(html, "html.parser")

        columns = ['Business Name', 'Control Number', 'Business Type', 'Business Status', 'NAICS Code', 'NAICS Sub Code',
                   'Principal Office Address', 'Date of Formation/ Registration Date', 'State of Formation/ Jurisdiction',
                   'Last Registration Year', 'Dissolved Date', 'Registered Agent', 'Registered Agent Address', 'County']

        df = pd.DataFrame(columns=columns)
        strong = []
        for strong_tag in soup.find_all('strong'):
            strong.append(str(strong_tag.text))

        if len(strong) == 14:
            values = [strong[0], strong[1], strong[2], strong[3], strong[4], strong[5], strong[6], strong[7], strong[8],
                      strong[9], strong[10], strong[11], strong[12], strong[13]]
        elif len(strong) == 6:
            values = [strong[0], '', '', 'Name Reservation', '', '', strong[3], strong[1], '', '', '', strong[2], '', '']

        elif len(strong) == 13 and "Active" in str(strong[3]):
            values = [strong[0], strong[1], strong[2], strong[3], strong[4], strong[5], strong[6], strong[7], strong[8],
                      strong[9], '', strong[10], strong[11],strong[12]]
#the above code appears to be correct for 13 length active compliance Domestic LLC( and possibly active owes current year)

Следующие 5 утверждений elif - это то, что я пытаюсь объединить. Я не уверен, как проверить, содержит ли элемент в списке любое из 5 слов, а также проверить длину списка.

 elif len(strong) == 13 and "Admin" in str(strong[3]):
        values = [strong[0], strong[1], strong[2], strong[3], strong[4], '', strong[5], strong[6], strong[7], strong[8],
                  strong[9], strong[10], strong[11], strong[12]]
    elif len(strong) == 13 and "Abandoned" in str(strong[3]):
        values = [strong[0], strong[1], strong[2], strong[3], strong[4], '', strong[5], strong[6], strong[7], strong[8],
                 strong[9], strong[10], strong[11], strong[12]]
    elif len(strong) == 13 and "Withdrawn" in str(strong[3]):
        values = [strong[0], strong[1], strong[2], strong[3], strong[4], '', strong[5], strong[6], strong[7], strong[8],
                  strong[9], strong[10], strong[11], strong[12]]
    elif len(strong) == 13 and "Dissolved" in str(strong[3]):
        values = [strong[0], strong[1], strong[2], strong[3], strong[4], '', strong[5], strong[6], strong[7], strong[8],
                 strong[9], strong[10], strong[11], strong[12]]
    elif len(strong) == 13 and "Terminated" in str(strong[3]):
        values = [strong[0], strong[1], strong[2], strong[3], strong[4], '', strong[5], strong[6], strong[7], strong[8],
                  strong[9], strong[10], strong[11], strong[12]]

    elif len(strong) == 12:
        values = [strong[0], strong[1], strong[2], strong[3], strong[4], '', strong[5], strong[6], strong[7], strong[8],
                  '', strong[9], strong[10], strong[11]]
    else:
        values = [strong[0], '', '', '', '', '', '', '', '', '', '', '', '', '']
        print("WARNING! New values length...")
    df = df.append(pd.Series(values, index=columns), ignore_index=True)
    df2 = df2.append(df)
driver.close()
driver.switch_to.window(driver.window_handles[0])

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Просто используйте in наоборот, вы хотите проверить, является ли strong[3] in массивом ['Admin', 'Abandoned', ...]:

l = ['Admin', 'Abandoned', 'Withdrawn', 'Dissolved', 'Terminated']
if len(strong) == 13 and strong[3] in l:
    values = strong[:5] + [''] + strong[5:]
elif len(strong) == 12:
    values = strong[:5] + [''] + strong[5:9] + [''] + strong[9:]
else:
    values = [strong[0]] + ['']*12

PS И вы также можете комбинировать элементы при назначенииvalues чтобы сделать его более кратким

0 голосов
/ 09 марта 2019

Внутренние проверки являются избыточными, я предлагаю вам добавить условие длины снаружи, и когда это условие будет выполнено, то в качестве примера будет выполнено следующее требование:

if len(strong) == 13:
   # All the flow comming here has a list of length 13
   if "Dissolved" in strong[3]:
      # Do whatever
      pass
   elif ...:
      ...
elif len(strong) == 12:
    ...

Таким образом, это более понятно.

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