728x90
400error로 인해 값이 들어오지 않은 경우 해당 경우의 연번을 확인하고 해당 연번 만 파싱
#연번
list_num = [ 30, 112, 178, 199, 478, 591, 649, 751, 752,
881, 902, 1136, 1203, 1271, 2199, 2609, 2645, 2850,
2983, 3000, 3073, 3171, 3469, 3786, 4100, 4565, 4761,
4872, 5099, 5131, 6087, 6196, 6270, 6275, 6915, 6977,
7209, 7213, 7238, 7244, 7286, 7341, 7361, 7514, 7767,
8197, 8226, 8284, 8344, 9297, 9384, 9580, 9621, 9662,
9743, 9959, 10646, 11067, 11210, 11578, 11814, 12424, 12538]
import requests
from bs4 import BeautifulSoup
import pandas as pd
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
import numpy as np
driver = webdriver.Chrome()
data = []
doc_data = []
sections = ['판정번호', '판정일', '주문', '청구취지', '신청내용', '신청인주장', '진료기록및의학적소견', '인정사실', '관계법령', '위원회판단및결론']
# sections_1 = ['주문', '청구 취지', '청구취지', '신청 내용', '신청내용' , '신청인 주장', '신청인주장', '진료기록 및 의학적 소견', '진료기록및의학적소견', '인정 사실', '인정사실', '관계 법령', '관계법령', '위원회 판단 및 결론', '위원회판단및결론']
parsed_data = {section: [] for section in sections}
for i in list_non_order:
i -= 1
pg_num = (i//20)+1
bt_num = i % 20
url = f'https://jilbyungcase.comwel.or.kr/service/dataList?qw=&q=&gubun=%EB%87%8C%EC%8B%AC%ED%98%88%EA%B4%80%EA%B3%84%EC%A7%88%EB%B3%91&gubun2=&viewType=&sortField=&sortOrder=&pageIndex={pg_num}&pageUnit=20'
driver.get(url)
driver.implicitly_wait(10)
driver.find_elements(By.CLASS_NAME,'btn-badge')[bt_num].click()
time.sleep(2)
driver.switch_to.window(driver.window_handles[-1])
soup = BeautifulSoup(driver.page_source, 'html.parser')
driver.implicitly_wait(10)
try:
parsed_data['판정번호'].append(soup.find_all('td')[0].get_text())
parsed_data['판정일'].append(soup.find_all('td')[1].get_text())
h1_tags = soup.find_all('h1')
for j, h1_tag in enumerate(h1_tags[1:]):
section_title = h1_tag.text.replace(" ", "")
temp = []
# 현재 h1 태그와 다음 h1 태그 사이의 모든 h4 태그 찾기
next_h1_tag = h1_tags[j + 2] if j + 2 < len(h1_tags) else None
current = h1_tag.find_next_sibling()
while current and (current != next_h1_tag):
if current.name == 'h4':
temp.append(current.text.strip())
current = current.find_next_sibling()
concatenated_text = " ".join(temp)
parsed_data[section_title].append(concatenated_text)
except:
parsed_data['판정번호'].append(None)
parsed_data['판정일'].append(None)
parsed_data['주문'].append(None)
parsed_data['청구취지'].append(None)
parsed_data['신청내용'].append(None)
parsed_data['신청인주장'].append(None)
parsed_data['진료기록및의학적소견'].append(None)
parsed_data['인정사실'].append(None)
parsed_data['관계법령'].append(None)
parsed_data['위원회판단및결론'].append(None)
driver.close()
driver.switch_to.window(driver.window_handles[0])
빠진 행을 채워넣는다
# df_2에서 '판정번호'가 null인 행의 인덱스를 찾습니다.
null_indices = df_before[df_before['주문'].isnull()].index.tolist()
# df_1의 행 수와 null_indices의 길이를 확인하여 둘 중 더 작은 값을 사용하여 반복합니다.
for i in range(len(null_indices)):
df_before.loc[null_indices[i], ['판정번호', '판정일', '주문', '청구취지', '신청내용', '신청인주장', '진료기록및의학적소견', '인정사실', '관계법령', '위원회판단및결론']] = df_1.iloc[i].values
728x90
반응형
'2023 > 근복' 카테고리의 다른 글
필요없는 문자 빼기 (0) | 2023.10.30 |
---|---|
크롤링 리스트 가져오기 (1) | 2023.10.30 |
크롤링 판정서 1차 문서 내용 (0) | 2023.10.30 |