2023/근복

크롤링 400채우기

notty 2023. 11. 2. 14:59
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