달나라 노트

Python : Web page의 HTML 코드를 가져오기. (Web Crawling, 크롤링, 웹 크롤링) 본문

Python/Python ETC

Python : Web page의 HTML 코드를 가져오기. (Web Crawling, 크롤링, 웹 크롤링)

CosmosProject 2021. 1. 23. 19:50
728x90
반응형

 

 

 

 

import requests
from bs4 import BeautifulSoup as bs

URL = "https://www.naver.com"

rq = requests.get(URL)
soup = bs(rq.content, 'html.parser')
print(soup)

어떤 Web 페이지의 HTML 코드를 가져오기 위해선 위처럼 requests와 bs4 libarary를 사용합니다.

 

 

 

 

 

URL = "https://www.naver.com"

rq = requests.get(URL)

위 부분은 정해진 URL에 대한 웹 자원을 요청하여 가져오는 역할을 합니다.

 

 

 

 

soup = bs(rq.content, 'html.parser')
print(soup)

그리고 BeautifulSoup의 기능을 사용합니다.

먼저 rq.content는 requests로부터 가져온 웹 자원이며, 이를 html.parser를 이용해 HTML코드로 파싱해줍니다.

즉, 내가 전달한 URL의 정보가 rq.content에 들어있고, 이 정보를 html.parser를 이용해 html code 형태로 바꾸라는 의미입니다.

그리고 html code를 soup라는 변수에 저장하는거구요.

 

soup 변수를 print하면 해당 주소의 HTML 코드가 출력됩니다.

 

 

 

 

 

다음은 전체 코드입니다.

import requests
from bs4 import BeautifulSoup as bs

URL = "https://www.naver.com"

rq = requests.get(URL)

soup = bs(rq.content, 'html.parser')
print(soup)

 

 

 

 

 

근데 간혹 어떤 웹페이지는 위처럼 했을 때 크롤링이 안되는 경우가 있습니다.

request.get(URL)의 결과로 아무 결과가 나오지 않고 무한 로딩이 되거나,

어떠한 에러를 발생시키는 경우이죠.

 

이런 상황은 여러 이유가 있겠다만,

그 중 하나는 마치 다음과 같은 이유입니다.

 

"우리 사이트로 요청을 했는데 너 사람맞아? 기계지?"

 

위처럼 url 서버가 나의 요청을 사람이 아닌 기계로 인식해서 requests.get(URL)의 결과를 주지 않는겁니다.

이런 경우 request.get() method의 옵션으로 header라는 옵션을 줘서 내가 사용자라는 것을 알려주면 됩니다.

 

 

일단 아래 사이트에서 내 정보를 가져옵시다.

http://www.useragentstring.com/

 

UserAgentString.com - unknown version

 

www.useragentstring.com

 

 

User Agent String explained 라고 적혀있는 부분을 보면 알 수 있습니다.

 

위처럼요.

 

 

 

import requests
from bs4 import BeautifulSoup as bs

URL = "https://www.naver.com"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
}

rq = requests.get(URL, headers = header)

soup = bs(rq.content, 'html.parser')
print(soup)

 

그리고 코드를 위처럼 수정해서 header 옵션을 주게 되면 이제 크롤링이 정상적으로 실행될 것입니다.

 

 

 

 

 

 

위와 다른 방법으로

UserAgent를 간단하게 변경하여 사용할 수 있는 library도 있습니다.

 

 

import requests
from bs4 import BeautifulSoup as bs
from fake_useragent import UserAgent

URL = "https://www.naver.com"

user_agent = UserAgent()
headers = {
    'User-Agent': user_agent.random
}

rq = requests.get(URL, headers = header)

soup = bs(rq.content, 'html.parser')
print(soup)

위처럼 fake_useragent를 사용하면 request를 할 때 마다 다른 user agent를 가져와서 제시해주게 됩니다.

 

 

 

 

 

 

728x90
반응형
Comments