Я делаю скребок в 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])