728x90

XML이란 내부적으로 트리 구조를 가지고 있는 파일을 표현하기 위해 사용하는 마크업 언어다.
웹페이지를 보여주기 위해 사용되는 html 파일이 XML의 가장 대표적인 예시다.

 

네이버 뉴스 가져오기는 실패하여 일단 기능 테스트를 위해 네이버지식인 정보가져오기를 시도했더니 잘된다.

#파이썬 크롤링 기초
# pip install lxml 을 윈도우 cmd 창에서 실행한다.
# pip install --upgrade pip
# pip list
# pip install requests
# pip install cssselect
 
from typing import get_args
import requests
from lxml.html import fromstring, tostring
 
def main():
    """
    네이버 지식인 스크랩핑 메인 함수
    """
 
    # 세션 사용
    session = requests.Session()
 
    # 스크랩핑 대상 URL (GET, POST)
    response = session.get("https://kin.naver.com/search/list.nhn?query=%ED%8C%8C%EC%9D%B4%EC%8D%AC")
 
    # 신문사 링크 리스트 획득
    urls = scrape_news_list_page(response)
 
    # 딕셔너리 확인
    # print(urls)
 
    # 결과 출력
    for name, url in urls.items():
        # url 출력
        print(name, url)
 
        # 파일 쓰기
        # 생략
 
def scrape_news_list_page(response):
    # url 리스트 선언
    urls = {}
 
    # 태그 정보 문자열 저장
    #print(response.content)
    root = fromstring(response.content)
    #print(root)
 
    for a in root.xpath('//ul[@class="basic1"]/li/dl/dt/a[@class="_nclicks:kin.txt _searchListTitleAnchor"]'):
        # a 구조 확인
        # print(a)
 
        # a 문자열 출력
        # print(tostring(a, pretty_print=True))
 
        name, url = extract_conents(a)
        # 딕셔너리 삽입
        urls[name] = url
        
    return urls
 
def extract_conents(doc):
    # 링크 주소
    link = doc.get("href")  
    name = doc.text_content()
    return name, link
 
 
# 스크랩핑 시작
if __name__ == "__main__":
    main()
 
 

 

크롤링을 위한 Chrome 브라우저 개발자 모드 html 코드보기 예시이다.

테스트에 사용한 파이썬 소스 코드

crawling_02.py
0.00MB

 

위 코드와 아래 BeautifulSoup4 를 이용한 코드 비교를 해보면 훨씬 더 간단하다는 걸 알 수 있다.

# 네이버 검색결과 크롤러 만들기
# BeautifulSoup은 HTML 과 XML 파일로부터 데이터를 수집하는 라이브러리
# pip install bs4
# pip install requests
 
import requests
from bs4 import BeautifulSoup
#import ssl
 
url = 'https://kin.naver.com/search/list.nhn?query=%ED%8C%8C%EC%9D%B4%EC%8D%AC'
 
response = requests.get(url)
 
if response.status_code == 200:
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    ul = soup.select_one('ul.basic1')
    titles = ul.select('li > dl > dt > a')
    for a in titles:
        print(a.get_text(), end=' : ')
        print(a.get('href'))
else : 
    print(response.status_code)
 

 

블로그 이미지

Link2Me

,