728x90
반응형
In [1]:
# !pip install builtwith
In [3]:
from builtwith import builtwith
builtwith('http://www.tistory.com')
# 웹페이지가 어떤 기술로 만들어졌는지를 확인할 수 있다.
# 그냥 Url만 입력하면 됨
# 상대방에 대한 정보를 취득하는 용도
Out[3]:
In [11]:
# !pip install python-whois
In [4]:
from whois import whois
whois('http://www.tistory.com')
# 소유권자에 대한 정보를 얻을 수 있다.
Out[4]:
In [5]:
# python 3 있으면 자동으로 있는 package
from urllib import request, robotparser
In [6]:
# robots.txt를 보고 내가 사용할 수 있는지 아닌지 봄
robot = robotparser.RobotFileParser()
In [7]:
robot.set_url('https://www.google.com/robots.txt')
In [8]:
robot.read()
In [9]:
robot.can_fetch("Agent","http://www.google.com")
# / 를 긁을 수 있는지 -> T / F
Out[9]:
In [26]:
from urllib import request
from urllib import error
headers = {'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'}
url = 'https://www.google.com/search?q=%ED%8C%8C%EC%9D%B4%EC%8D%AC'
def download(url,retries=3): # 에러가 났을 때, 3번 정도 더 시도해 보는 것.
resp = None
req = request.Request(url,headers=headers)
try:
resp = request.urlopen(req)
except error.HTTPError as e:
if 500 <= e.code < 600 and retries > 0: # 500대 에러이면 한 번 더 시도하는 것
return download(url,retries-1) # 여기서는 딱 3번 돔 (재귀적으로)
else:
print(e.code)
print(e.reason)
print(e.headers)
return resp
html = download(url)
#html.read().decode('utf-8')
## 파이썬 검색해서 하면 안뜸 searchMozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36가 disallowed 이기 때문에 ( forbidden )
## 파라미터는 항상 바이트 타입으로 보내야함.
## 한글로 그대로 대신 적어주면 에러 뜸
### header 추가하면 403 에러 뜨지 않음
### 에러 400 : 내 잘못 / 500 : 서버 잘못, 다시 시도해봐야함
In [27]:
type(html)
Out[27]:
In [28]:
# 잘 받았는지 확인
html.geturl()
Out[28]:
In [29]:
html.code # 200 이면 잘 받은 것
Out[29]:
In [30]:
html.getheaders()
Out[30]:
In [31]:
# 데이터 부분을 읽어옴 ( b = byte임. utf-8로 바꾸면 ' 가 나옴' 이제 문자열이 된 것 )
html.read().decode('utf-8')
Out[31]:
In [32]:
# URL parsing
# url의 string을 다 잘라내서 여러 개의 요소로 나누는 것
from urllib import parse
parse.urlparse(url) # 6개로 쪼갬
# 분해하고 합칠 줄 알아야함!!
Out[32]:
In [33]:
# 합치기
parse.urljoin(url,'/search/about') # 상대주소를 가지고 절대주소를 만드는 것
Out[33]:
In [34]:
# 글자를 단지 바꿔주는 것
# parse.quote() : 헥사바이트로 바꿔주는 것
parse.quote_plus('파이썬') # 띄어쓰기를 +로 표시함
parse.unquote_plus('%ED%8C%8C%EC%9D%B4%EC%8D%AC')
# 역으로 해석하는 것 ( 헥사바이트 -> 문자 )
Out[34]:
In [35]:
# 파라미터는 항상 ? 뒤에 옴 그리고 한 쌍으로 이루어짐
# dict or tuple의 쌍이 들어오면 url의 query 형태의 파라미터로 바꿔준다
parse.urlencode({'q':'파이썬'})
# 딕셔너리에 우리가 필요한 파라미터를 넣으면 알아서 생성해줌
Out[35]:
In [36]:
# 서비스 토큰 API같은 것을 넣으려고 하면 unquote로 풀고 다시 quote로
# 해야한다. 아니면 기존의 헥사코드를 또 헥사코드로 만든다. ( 자기자신이 되도록 만들어주는 과정 )
In [37]:
import requests
# 더 capsulize된 라이브러리.
# 더 편함
In [38]:
url = 'http://www.google.com/search'
resp = requests.get(url,params={'q':'파이썬'},headers=headers)
# urlencode 과정이 자동으로 된 것, 한글 사용해도 무방함
In [39]:
resp.raise_for_status()
# HTTPError 발생 시 안에있는 정보를 다 내보냄
resp.status_code # 이 에러가 500대 인지 아닌지가 중요한 것.
resp.reason
resp.headers
resp.request.headers
Out[39]:
In [40]:
type(resp.text)
resp.encoding= 'utf-8'
resp.encoding
Out[40]:
In [41]:
resp.headers # blocked 된 headers 임.
Out[41]:
In [42]:
resp.url
Out[42]:
In [43]:
resp.request.headers
# 실제 우리가 날린 header가 된다.
# user-agent가 없어서 block 하는 것
Out[43]:
In [44]:
import requests
url = "https://www.google.com/search"
headers = {'user-agent' :'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'}
# headers 에 mozila부분만 들어가도 가능함
# headers에 각자의 user-agent값을 key-value로 입력하면 된다.
def download(url, param=None,retries=3): # 에러가 났을 때, 3번 정도 더 시도해 보는 것.
resp = None
try:
resp = requests.get(url,params=param,headers=headers)
except requests.exceptions.HTTPError as e:
if 500 <= resp.status_code < 600 and retries > 0: # 500대 에러이면 한 번 더 시도하는 것
return download(url,retries-1) # 여기서는 딱 3번 돔 (재귀적으로)
else:
print(resp.status_code)
print(resp.reason)
print(resp.headers)
print(resp.request.headers)
return resp
#html = download(url)
#html.read().decode('utf-8')
## 파이썬 검색해서 하면 안뜸 searchMozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36가 disallowed 이기 때문에 ( forbidden )
## 파라미터는 항상 바이트 타입으로 보내야함.
## 한글로 그대로 대신 적어주면 에러 뜸
### header 추가하면 403 에러 뜨지 않음
### 에러 400 : 내 잘못 / 500 : 서버 잘못, 다시 시도해봐야함
In [45]:
html = download(url,param={'q':'파이썬'})
In [46]:
html.text
Out[46]:
728x90
반응형