크롤링 url 추출 - keulolling url chuchul

아래와 같이 bs4를 임포트하고, Beautifulsoup 함수의 인자로 위에서 가져온 response.text와 함께 파싱에 사용할 파서의 이름을 같이 넘겨준다.(파서는 lxml 등 다른 것들도 있다.)

 

import bs4
soup = bs4.BeautifulSoup(response.text,"html.parser")

 

여기까지 한 뒤에 soup를 그냥 출력해보자. 그러면 아까 response.text 한 것과 비슷한 모습일 텐데, 이제는 beautifulsoup를 이용해 원하는 부분만 추출할 수 있다는 점에서 달라졌다.

네이버에서 기사를 검색하기 위해 키워드를 입력하고 뉴스 탭을 클릭한 경우, 관련도순으로 나오는 1페이지 기사를 추출하는 크롤링 코드임. 기사 일자와 기사 제목, 그리고 기사 원문 링크 주소(URL)를 추출하여 텍스트 파일로 저장한다.  

 

 

네이버 뉴스 기사 제목과 링크 주소(URL) 추출 [파이썬 크롤링]

 

[파이썬 소스 코드]

from bs4 import BeautifulSoup
import requests
from datetime import datetime

def naver_news(keyword):
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36'
    }

    url = f'https://search.naver.com/search.naver?where=news&sm=tab_jum&query={keyword}'

    response = requests.get(url, headers=header)
    soup = BeautifulSoup(response.text, 'html.parser')

    news_lis = soup.select('#main_pack > section > div > div.group_news > ul > li')
    print(len(news_lis))

    newsday = datetime.today().strftime('%Y%m%d%H%M%S')
    filename = 'naver_news_' + newsday + '.txt'

    with open(filename, 'w') as f:
        f.write(f'\n{"="*50}\n{datetime.today().strftime("[%Y년 %m월 %d일] <" + keyword + "> 관련도순 네이버 뉴스 검색")}\n{"="*50}\n')

    for li in news_lis:
        news_day = li.find('span', class_='info').text.strip()
        title = li.find('a', class_='news_tit')['title']
        a_href = li.find('a', class_='news_tit')['href']
        print(news_day)
        print(title)
        print(a_href)

        with open(filename, 'a') as f:
            f.write(f'\n[{news_day}]\n{title}\n{a_href}\n')


naver_news('케스코')
  • 네이버 기사를 추출하여 텍스트 파일로 저장함

 

 

 

크롤링 url 추출 - keulolling url chuchul

 

[실행 결과]

10
6일 전
창호전문기업 케스코, 2년 연속 국토부 '그린리모델링' 우수 사업자 선정
https://www.news1.kr/articles/?4677171
5일 전
창호전문기업 케스코, 국토부 '그린리모델링' 우수 사업자 2년 연속 선정
http://www.gvalley.co.kr/news/articleView.html?idxno=603607
2021.09.30.
케스코, 에너지절약전문기업 사업자 등록
http://www.asiaa.co.kr/news/articleView.html?idxno=60104
2021.09.29.
케스코, 에너지절약전문기업(ESCO) 사업자 등록
http://www.sentv.co.kr/news/view/602079
2021.09.28.
주식회사 케스코, 에너지절약전문기업(ESCO) 사업자 등록
https://www.sedaily.com/NewsView/22RN21RTFG
2021.04.01.
케스코, '2021 대한민국 명품브랜드 대상' 건설 창호 부문 수상
https://www.asiatoday.co.kr/view.php?key=20210401001019249
2021.03.31.
케스코, ‘대한민국 명품브랜드 대상’ 건설 창호 부문 수상
http://www.ajunews.com/view/20210331100647582
2021.02.23.
케스코물산, 디지털 압축력 측정기 ‘KP-3000’ 판매개시
http://www.electimes.com/article.php?aid=1614062638212964011
2021.02.18.
‘창호교제 시공사업 정착에 기여’ 케스코, ‘2020년 그린리모델링 우수 사업자’
http://news.heraldcorp.com/view.php?ud=20210218000736
2021.02.17.
창호시공업체 케스코, ‘2020년 그린리모델링 우수 사업자’ 선정
https://www.etoday.co.kr/news/view/1995550

 

 

 

반응형

공유하기

게시글 관리

구독하기Good For Me

저작자표시 비영리 변경금지

  • 카카오스토리
  • 트위터
  • 페이스북

'Python > 크롤링' 카테고리의 다른 글

구글 이미지 검색 후 크롤링  (0)2022.05.20네이버 인플루언서 탭에서 인플루언서의 이름과 팬 숫자 추출하기  (0)2022.05.18티스토리 블로그 내 이미지 다운로드  (0)2022.05.10네이버 뉴스 감정 표시 숫자 추출하기  (0)2022.04.27네이트 실시간검색어  (0)2022.04.25

728x90

자료의 출처는 엘리스 AI 트랙(https://aitrack.elice.io/) '파이썬 크롤링'  이며, 학습 후 정리한 내용입니다.

⚡️올바르지 않은 내용이 있을 경우 댓글로 남겨주시면 감사하겠습니다.⚡️


여러 페이지 크롤링하기

Query

크롤링 url 추출 - keulolling url chuchul

이 뉴스 웹사이트는 각 페이지의 URL에서 p=(숫자) 부분이

20씩 증가하고 있는 규칙이 있다.
이 사이트에서 여러 페이지를 크롤링하려면 어떻게 해야 할까?

for i in range(0, 5) :
    url = "http://sports.donga.com/Enter?p="+str((i*20+1))
    ...

 

쉬운 방법으로는 URL문자열 연산으로 처리하여 새로운 URL을 얻는 것

 

하지만, URLquery(쿼리)를 이용하면 이 작업을 더 효과적으로 할 수 있다.

 

웹서버에 GET 요청을 보낼 때

조건에 맞는 정보를 표현하기 위한 변수

 

) 번호1번인 학생을 보여줘라
전체 기사 중
페이지21인 기사들을 보여줘라

 

크롤링 url 추출 - keulolling url chuchul

google에 ‘elice’를 검색한 결과이다.
q라는 변수에 elice라는 값이 담겨,
전체 데이터 중 elice라는 키워드로 검색한 결과만을 보여준다.

크롤링 url 추출 - keulolling url chuchul

네이버 영화 서비스에서 특정 영화를 클릭하면,

code라는 변수에 영화 코드가 담겨
해당 영화에 대한 정보를 보여준다
.

request 라이브러리

url = "https://www.google.com/search"
result = requests.get(url, params = {'q':'elice'})

 

requestsget 메소드로 GET 요청을 보낼 때

params 매개변수에 딕셔너리를 전달함으로써

쿼리를 지정할 수 있다.

code = ... # 영화코드에대한정보를얻는다.
result = requests.get(url, params = {'movie':code})

 

전체 영화 데이터에서 영화 코드에 대한 정보를 찾고,

다시 requests를 이용하여 특정 영화에 대한 정보를

얻는 요청을 할 수 있다.

Tag Attribute

태그와 속성

<div class=“elice” id=“title”>제목</div> 
 태그  속성          속성

 

HTML에는 여러 종류의 태그태그에 특정 기능이나 유형을 적용하는 속성이 있다.

div = soup.find("div")
print(div.attrs)

 

어떤 태그의 속성이 무엇이 있는지 확인할 때는 attrs 멤버변수를 출력

print(div['class'])

 

attrs 딕셔너리의 키로 인덱싱하여, 태그의 속성에 접근할 수 있다.

href 속성

<a href=“https...”>기사제목</a>

 

a 태그는 하이퍼링크를 걸어주는 태그로써

이동할 URLhref 속성에 담고 있다.

a = soup.find("a")
href_url = a["href"]

 

위와 같이 href 속성을 이용하여
웹 페이지에 존재하는 하이퍼링크의
URL을 얻을 수 있다.

Children, Name

웹 사이트의 구조가 복잡한 경우 다양한 옵션을 적용해야 할 수도 있다.

 

children은 어떤 태그가 포함하고 있는 태그, name은 어떤 태그의 이름을 의미하는 속성

 

<div>
  <span>span1</span>
  <span>span2</span>
  <p>p tag</p>
  <img ... />
</div>

 

옆의 div 태그는 여러 태그들을 갖고 있다.

soup.find("div").children
#span, p, img 태그를 갖는 리스트를 얻는다.

 

위의 코드는 어떤 div 태그를 찾고,
div 태그에 포함된 태그들의 리스트를 얻는 코드이다.

Name

url = "https://www.google.com/search"
result = requests.get(url, params = {'q':'elice'})
0

 

어떤 태그의 이름을 알고 싶다면 name 속성을 이용할 수 있다.

태그가 존재하지 않는 경우 None 값을 얻는다.

url = "https://www.google.com/search"
result = requests.get(url, params = {'q':'elice'})
1
url = "https://www.google.com/search"
result = requests.get(url, params = {'q':'elice'})
2

Tip.

어떤 태그가 갖고 있는 속성들은 딕셔너리의 형태로 저장됨.

예를 들어, a 태그가 href, onclick의 속성을 갖고 있다면 그 속성들은

url = "https://www.google.com/search"
result = requests.get(url, params = {'q':'elice'})
3

과 같이 표현됨.

어떤 태그 a의 속성 href에 바로 접근하는 방법은

url = "https://www.google.com/search"
result = requests.get(url, params = {'q':'elice'})
4

위와 같이 대괄호와 속성 이름을 명시하는 것

전체 속성을 담고 있는 딕셔너리를 확인하기 위해서는

url = "https://www.google.com/search"
result = requests.get(url, params = {'q':'elice'})
5

로 확인

url = "https://www.google.com/search"
result = requests.get(url, params = {'q':'elice'})
6
url = "https://www.google.com/search"
result = requests.get(url, params = {'q':'elice'})
7
url = "https://www.google.com/search"
result = requests.get(url, params = {'q':'elice'})
8
url = "https://www.google.com/search"
result = requests.get(url, params = {'q':'elice'})
9
code = ... # 영화코드에대한정보를얻는다.
result = requests.get(url, params = {'movie':code})
0

 

 

 

 

 

728x90

공유하기

게시글 관리

구독하기NyeolStory

'IT > Python' 카테고리의 다른 글

파이썬 크롤링-04. 워드클라우드 프로젝트  (0)2021.06.26파이썬 크롤링-03. API를 이용한 크롤링  (0)2021.06.24파이썬 크롤링-01. 크롤링의 기초  (0)2021.06.21객체지향 프로그래밍-04. 모듈과 패키지  (0)2021.06.21객체지향 프로그래밍-03. 클래스의 상속과 다형성  (0)2021.06.20