#python #selenium #web-scraping
Вопрос:
Я закончил код, чтобы очистить этот веб-сайт: https://publicrecordsaccess.fultoncountyga.gov/Portal/Home/Dashboard/29 Чтобы попасть на веб-страницу, вам нужно будет ввести «Белый, Жасмин» в части поиска и обойти reCAPTCHA вручную. Вот мой код
#Empty List to store the elements
name =[]
address = []
dob = []
race = []
gender = []
defendant = []
date = []
ftype = []
status = []
case_id = []
web = 'https://publicrecordsaccess.fultoncountyga.gov/Portal/Home/Dashboard/29'
keys = 'White, Jasmine'
nb = 1
b = "CaseResultsGrid_"
op = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=op, executable_path="/usr/local/bin/chromedriver")
actions = ActionChains(driver)
driver.get(web)
driver.find_element_by_xpath('//*[@id="caseCriteria_SearchCriteria"]').send_keys(keys)
#Wait til bypass the reCAPTCHA and webpage fully loaded to continue
input("Press Enter to continue...")
content = driver.find_elements_by_css_selector(".k-detail-cell .party-card")
for c in content:
#The loop will stop/break when it cant locate any web elements
try:
tr = c.find_element_by_xpath(f'//*[@id="Grid"]/table/tbody/tr[{nb}]/td[2]/a')
except:
break
#Get Grid ID
actions.move_to_element(c).perform()
time.sleep(0.2)
g = c.get_attribute('id')
#Get Data ID
pat = c.find_element_by_xpath(f'//*[@id="Grid"]/table/tbody/tr[{nb}]/td[2]/a')
id_nub = pat.get_attribute('data-party-id')
k = b id_nub
#Name
try:
cname = c.find_element_by_xpath(f'//*[@id="Grid"]/table/tbody/tr[{nb}]/td[2]/a').text.strip()
name.append(cname)
except:
name.append('')
#dob
try:
born = c.find_element_by_xpath(f'//*[@id="Grid"]/table/tbody/tr[{nb}]/td[3]').text.strip()
dob.append(born)
except:
dob.append('')
#Address
try:
addr = c.find_element_by_xpath(f'//*[@id="{g}"]/div[1]/div[1]/div/div[2]/div').text.strip()
address.append(addr)
except:
address.append('')
#Race
try:
rac = c.find_element_by_xpath(f'//*[@id="{g}"]/div[1]/div[2]/div/div[2]').text.strip()
race.append(rac)
except:
race.append('')
#Gender
try:
gen = c.find_element_by_xpath(f'//*[@id="{g}"]/div[1]/div[3]/div/div[2]/div').text.strip()
gender.append(gen)
except:
gender.append('')
#Case Number
try:
case = c.find_element_by_xpath(f'//*[@id="{k}"]/table/tbody/tr[1]/td[2]/a').text.strip()
case_id.append(case)
except:
case_id.append('')
#Defendant
try:
defe = c.find_element_by_xpath(f'//*[@id="{k}"]/table/tbody/tr[1]/td[3]/div').text.strip()
defendant.append(defe)
except:
defendant.append('')
#File Date
try:
fdate = c.find_element_by_xpath(f'//*[@id="{k}"]/table/tbody/tr[1]/td[4]').text.strip()
date.append(fdate)
except:
fdate.append('')
#Type
try:
ctype = c.find_element_by_xpath(f'//*[@id="{k}"]/table/tbody/tr[1]/td[5]').text.strip()
ftype.append(ctype)
except:
ftype.append('')
#Status
try:
fstatus = c.find_element_by_xpath(f'//*[@id="{k}"]/table/tbody/tr[1]/td[6]').text.strip()
status.append(fstatus)
except:
status.append('')
#The number is increased by 2 since only odd number contain the information in thie web page
nb = 2
driver.close()
print('Done')
#Convert all List into one dataframe
df = pd.DataFrame({
'Name':name,
'Address': address,
'DOB':dob,
'Race':race,
'Gender':gender,
'Case_ID': case_id,
'Defendant':defendant,
'File_Date':date,
'Tyep':ftype,
'Status':status
})
Мой код работает отлично, может быть, он может быть быстрее/проще. Он может очистить все, за исключением 1, который мой код способен удалить только первую запись информации. Как показано на скриншоте ниже, у первой Жасмин Уайт две записи, но у второй Жасмин Уайт только одна. Я хотел бы добавить/изменить свой код, чтобы иметь возможность удалять каждую запись, независимо от того, сколько у них записей, например 1, 2, 3 или, может быть, больше записей.
Было бы здорово, если бы у меня были какие-то предложения по этому поводу! Спасибо вам всем!!