네이버 뉴스 URL 크롤링-requests, Beautiful Soup 모듈

작업 목표 네이버 뉴스 메뉴에서 각 뉴스의 url을 수집하여 list 형식으로 저장 작업 목표 네이버 뉴스 메뉴에서 각 뉴스의 url을 수집하여 list 형식으로 저장

used package リクエスト、 Beautiful Soup used package リクエスト、 Beautiful Soup

Import request from bs4 import BeautifulSoup Import request from bs4 import BeautifulSoup

You can use the get module (function) in the requests package to save url to a variable and receive url’s html code when executing the variable .content. You can analyze the html module using the Beautiful Soup package. You can use the get module (function) in the requests package to save url to a variable and receive url’s html code when executing the variable .content. You can analyze the html module using the Beautiful Soup package.

page_num = 1code = 101date = 20200506# You cannot add a string and a number, so you must change the number to a string url = ‘https://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=’+str(code)+’&date=’+str(date)+’&page=’+str(page_num) page_num = 1code = 101date = 20200506# You cannot add a string and a number, so you must change the number to a string url = ‘https://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=’+str(code)+’&date=’+str(date)+’&page=’+str(page_num)

Verify url structure and generate address by number of pages/category name (code)/date that can be variable. Verify url structure and generate address by number of pages/category name (code)/date that can be variable.

프린트(url) 프린트(url)

 

No language detected.

Please check the input language, no language detected.

Please check the input language.

 

 

# If you save the URL to a variable without access information, you cannot receive the information. news = requests.get(url) # If you save the URL to a variable without access information, you cannot receive the information. news = requests.get(url)

 

News.Content News.Content

 

b’ <HTML><n<TITLE>Service unavailable</TITLE><n</HEAD><BODY><n<H1>Service unavailable(+)b'<HTML></TITLE> Service unavailable</TITLE_</BODY_</BODY_</H1_Service unavailable(+)

If there is no access information as described above, an error message will be printed stating that html information cannot be received If there is no access information as described above, an error message will be printed stating that html information cannot be received

# 접근정보 추가 headers = {‘user-agent’}: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) Apple WebKit/537.36 (KHTML、Gecko 同様) Chrome/96.0.464.110 Whale/3.12.129.46 Safari/537.36’} news = requests(url, headers= headers) # 접근정보 추가 headers = {‘user-agent’}: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) Apple WebKit/537.36 (KHTML、Gecko 同様) Chrome/96.0.464.110 Whale/3.12.129.46 Safari/537.36’} news = requests(url, headers= headers)

requests 패키지의 get 모듈을 사용하여 url을 변수로 받은 후 변수 .content를 하면 url의 html 정보를 받을 수 있습니다. 이때 내 PC의 접속 정보를 추가하여 사용자가 페이지에 접속하는 것으로 인식할 수 있도록 해야 합니다. # PC의 접속 정보는 아래 사이트에서 확인 가능한 “Access Denieed” 또는 “Request is denieed”와 같은 결과가 나오면 접속 정보가 없어 사이트 접속이 차단된 것입니다. 아래 웹사이트에서 자신의 PC 접속 정보를 확인할 수 있습니다. http://www.useragentstring.com/ requests 패키지의 get 모듈을 사용하여 url을 변수로 받은 후 변수 .content를 하면 url의 html 정보를 받을 수 있습니다. 이때 내 PC의 접속 정보를 추가하여 사용자가 페이지에 접속하는 것으로 인식할 수 있도록 해야 합니다. # PC의 접속 정보는 아래 사이트에서 확인 가능한 “Access Denieed” 또는 “Request is denieed”와 같은 결과가 나오면 접속 정보가 없어 사이트 접속이 차단된 것입니다. 아래 웹사이트에서 자신의 PC 접속 정보를 확인할 수 있습니다. http://www.useragentstring.com/

UserAgentString.com – 不明なバージョンHome | List of User Agent Strings | Links | API | User Agent String の説明: facebook externalhit/1.1 (compatible; Blueno/1.0; +http://naver.me/scrap) このフィールドの任意のユーザ エージェント文字列をコピー/ペーストし、「Analyze」未知の facebook externalhit????をクリックします??? 1.1 ??? 互換性のある互換性フラグ···www.useragentstring.com UserAgentString.com – 不明なバージョンHome | List of User Agent Strings | Links | API | User Agent String の説明: facebook externalhit/1.1 (compatible; Blueno/1.0; +http://naver.me/scrap) このフィールドの任意のユーザ エージェント文字列をコピー/ペーストし、「Analyze」未知の facebook externalhit????をクリックします??? 1.1 ??? 互換性のある互換性フラグ···www.useragentstring.com

 

 

news.content です news.content です

 

b’\r\n です\r\nです\r\nです\r\nです<!DOCTYPE HTML>\r\n<html lang=”ko”>\r\n です<머리>\r\n です<meta charset=”euc-kr”>\r\n です<meta http-equiv=”X-UA-Compatible” content=”です IE=edge”>\r\n です<meta name=”referer” contents=”always”>\r\n です<meta http-equiv=”refresh” content=”600″ />\r\n です<meta name=”viewport” content=”width=(이하생략) です b’\r\n です\r\nです\r\nです\r\nです<!DOCTYPE HTML>\r\n<html lang=”ko”>\r\n です<머리>\r\n です<meta charset=”euc-kr”>\r\n です<meta http-equiv=”X-UA-Compatible” content=”です IE=edge”>\r\n です<meta name=”referer” contents=”always”>\r\n です<meta http-equiv=”refresh” content=”600″ />\r\n です<meta name=”viewport” content=”width=(이하생략) です

html 정보가 정상적으로 추출되어 news 변수에 저장되는 것을 확인할 수 있습니다 html 정보가 정상적으로 추출되어 news 변수에 저장되는 것을 확인할 수 있습니다

requests 패키지를 사용하여 html 정보를 얻는 방법이 정상적으로 진행되는 것을 확인하였기에 requests 패키지에 취득한 html 정보에서 Beautiful Soup을 사용하여 태그 중 필요한 정보인 주소 URL만 취득하는 작업을 수행하는 함수를 생성해야 한다. html 구조확인 페이지당 뉴스기사는 20개로 상단의 10개 뉴스기사는 type06_headline 클래스에 있으며 하단의 10개 뉴스기사는 type06 클래스에 들어있다. 따라서 크롤링 시 두 클래스의 태그 안의 url을 모두 가져와야 한다. requests 패키지를 사용하여 html 정보를 얻는 방법이 정상적으로 진행되는 것을 확인하였기에 requests 패키지에 취득한 html 정보에서 Beautiful Soup을 사용하여 태그 중 필요한 정보인 주소 URL만 취득하는 작업을 수행하는 함수를 생성해야 한다. html 구조확인 페이지당 뉴스기사는 20개로 상단의 10개 뉴스기사는 type06_headline 클래스에 있으며 하단의 10개 뉴스기사는 type06 클래스에 들어있다. 따라서 크롤링 시 두 클래스의 태그 안의 url을 모두 가져와야 한다.

type06_headline 클래스 type06_headline 클래스

 

type06 클래스 type06 클래스

함수 생성 함수 생성

 

 

 

url_list = make_urlist(1, 101, 20200506)print(‘뉴스 기사의 개수:’, len(url_list))url_list = make_urlist(1, 101, 20200506)print(‘뉴스 기사의 개수:’, len(url_list))

 

뉴스 기사 수: 20 뉴스 기사 수: 20

(1, 101, 20200506)의 의미는 1쪽/경제 카테고리/날짜 20200506을 뜻하는 페이지당 뉴스 기사는 20건이었으므로 뉴스 기사 url도 20건 존재한다는 것. (1, 101, 20200506)의 의미는 1쪽/경제 카테고리/날짜 20200506을 뜻하는 페이지당 뉴스 기사는 20건이었으므로 뉴스 기사 url도 20건 존재한다는 것.

url_list url_list

 

No language detected.

Please check the input language, no language detected.

Please check the input language.

 

# If you wish to output only a portion of the data, the following is a slicing url_list[:5] # If you wish to output only a portion of the data, the following is a slicing url_list[:5]

 

No language detected.

Please check the input language, no language detected.

Please check the input language.