innate
50
2021-05-18 02:29:25
3
211

파이썬 csv 웹사이트(XML) 크롤링 관련 질문합니다!


제가 국어사전에 단어들을 크롤링 하여 나열해볼려고하는대 실행결과값에 빈줄, 공백이 많이 생겨 질문합니다.

from urllib.parse import quote_plus  # quote_plus 한국어로 된 값을 웹에서 사용할수있게 자동번역
from os import replace
from urllib.request import urlopen
from bs4 import BeautifulSoup

for a in range(010):
    url = 'https://stdict.korean.go.kr/api/view.do?key=zzzzzzzzzzzzzzzzzzzzzzz&method=target_code&q=' + str(a)
    req = urllib.request.Request(url)
    html = urllib.request.urlopen(req).read()
    soup = BeautifulSoup(html'html.parser')

    lst50 = soup.select('word_info'# 필요한 필드값을 가져옴
    lst5 = soup.select('word_info'# 필요한 필드값을 가져옴

    for i in lst50:
        print(i.select_one(str('word')).text, end='')
        print(i.select_one(str('word_type')).text, end='')
코드는 이러합니다(KEY값은 ZZZZ으로 임시처리)


위에 사진은 코드 결과값입니다(코드는 아직 미완성입니다..)

그리고 국립국어원 표준 국어대사전에서 제공하는 검색출력메시지 XML예시입니다
- 검색 출력 메시지 XML 예시
	<?xml version="1.0" encoding="UTF-8" ?>
	<xml version="2.0">
		<channel>
			<title> 표준 국어 대사전 개발 지원(Open API) - 사전 검색 </title>
			<link> https://stdict.korean.go.kr </link>
			<description> 표준 국어 대사전 개발 지원(Open API) – 사전 검색 결과 </description>
			<lastBuildDate>2</lastBuildDate>
			<total>1</total>
			<item>
				<target_code>404765</target_code>
				<word_info>
					<word>나무</word>
					<word_unit>단어</word_unit>
					<word_type>고유어</word_type>
				</word_info>
				<pos_info>
					<pos>명사</pos>
					<comm_pattern_info>
						<sense_info>
							<type>일반어</type>
							<definition>줄기나 가지가 목질로 된 여러해살이 식물.</definition>
							<example_info>
								<example>나무가 우거진 산.</example>
							</example_info>
							<example_info>
								<example>나무가 울창한 숲.</example>
							</example_info>
						</sense_info>
					</comm_pattern_info>
				</pos_info>
			</item>
		</channel>
	</xml> 
실행결과값에 빈줄 및 공백이 생겨 없애는 방법을 알고싶습니다.......

0
  • 답변 3

  • 캐티
    5k
    2021-05-18 03:05:44

    공백이 불편하시면 " 1234 ".strip() 하면 양쪽 공백이 없어지저.

  • howoni123
    1k
    2021-05-18 10:41:25 작성 2021-05-18 10:42:30 수정됨

    XML 을 HTTP 로 파싱하시면 어려울거같은데요..

    XML 문서는 XML 라이브러리로 파싱하시는게 어떨까요... 그게 API 사용에 올바른 방법일거 같아용


    그래도.. 꼭 bs4를 써야하신다면 좌우공백은 "탭"공간이기때문에 \t 로 지워주시고.. 

    띄어쓰기(엔터 / CRLF)경우 \r\n 를 replace 로 없애버리면 됩니다.

    import requests as rq
    import xmltodict
    from bs4 import BeautifulSoup
    
    url = 'https://stdict.korean.go.kr/api/view.do?certkey_no=2619&key=[KEY]&method=target_code&q=1'
    r = rq.get(url, verify=False)
    xml = r.text
    
    print('bs4')
    soup = BeautifulSoup(xml, 'html.parser')
    lst50 = soup.select('word_info')
    for i in lst50:
        print(i.select_one(str('word')).text)
        print(i.select_one(str('word_type')).text.replace('\t','').replace('\r\n',''))
    
    
    print('\nxml to dict')
    q = xmltodict.parse(xml)
    print(q['channel']['item']['word_info']['word'])
    print(q['channel']['item']['word_info']['word_type'])
    
    
    #result
    bs4
    가경-지
    한자어
    
    xml to dict
    가경-지
    한자어
  • innate
    50
    2021-05-18 20:24:45

    xml은 xml 1주밖에 안 돼서 뭐가 뭔지 잘 몰랐어요 감사합니다! 많은 도움이 되었습니다

  • 로그인을 하시면 답변을 등록할 수 있습니다.