urrlib.request.urlopen에 대한 Python 3의 사용자 에이전트 변경
다음을 사용하여 URL을 엽니다.urllib.request.urlopen('someurl')
:
with urllib.request.urlopen('someurl') as url:
b = url.read()
다음 오류가 계속 발생합니다.
urllib.error.HTTPError: HTTP Error 403: Forbidden
저는 사이트가 python이 액세스하지 못하게 하여 봇이 네트워크 리소스를 낭비하는 것을 막았기 때문에 발생한 오류를 이해합니다.검색해보니 urllib에 대한 사용자 에이전트를 변경해야 합니다.그러나 사용자 에이전트를 변경하는 방법에 대해 이 문제에 대해 찾은 모든 가이드와 솔루션은 urlib2와 함께 있었고, 저는 python 3을 사용하고 있어서 모든 솔루션이 작동하지 않습니다.
파이썬 3에서 이 문제를 어떻게 해결할 수 있습니까?
Python 문서에서:
import urllib.request
req = urllib.request.Request(
url,
data=None,
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
}
)
f = urllib.request.urlopen(req)
print(f.read().decode('utf-8'))
from urllib.request import urlopen, Request
urlopen(Request(url, headers={'User-Agent': 'Mozilla'}))
저는 여기서 비슷한 질문에 답했습니다: https://stackoverflow.com/a/43501438/206820
URL을 여는 것뿐만 아니라 리소스(예: PDF 파일)를 다운로드하려는 경우 다음 코드를 사용할 수 있습니다.
# proxy = ProxyHandler({'http': 'http://192.168.1.31:8888'})
proxy = ProxyHandler({})
opener = build_opener(proxy)
opener.addheaders = [('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30')]
install_opener(opener)
result = urlretrieve(url=file_url, filename=file_name)
프록시를 추가한 이유는 Charles의 트래픽을 모니터링하기 위한 것이며, 다음은 받은 트래픽입니다.
호스트 사이트 거부는 Apache 모드 보안에 대한 OWASP 모드 보안 핵심 규칙에서 발생합니다.규칙 900002에는 "나쁜" 사용자 에이전트 목록이 있으며, 그 중 하나가 "python-urllib2"입니다.기본 사용자 에이전트를 사용하는 요청이 실패하는 이유입니다.
안타깝게도 파이썬의 "로봇 파서" 기능을 사용한다면,
기본 Python 사용자 에이전트를 사용하며 이를 변경할 매개 변수는 없습니다."로봇 파서"가 "로봇"을 읽으려고 시도하는 경우.txt"가 거부되면(URL을 찾을 수 없을 뿐만 아니라) 해당 사이트의 모든 URL이 허용되지 않는 것으로 처리됩니다.
언급URL : https://stackoverflow.com/questions/24226781/changing-user-agent-in-python-3-for-urrlib-request-urlopen
'programing' 카테고리의 다른 글
새로 설치한 후 Postgresql에 로그인하고 인증하는 방법은 무엇입니까? (0) | 2023.05.17 |
---|---|
kestrel 웹 서버가 비로컬 호스트 요청을 수신하도록 하려면 어떻게 해야 합니까? (0) | 2023.05.17 |
앱 제거 시 키 체인 항목 삭제 (0) | 2023.05.17 |
다른 분기 없이 하나의 Git 분기만 푸시하는 방법은 무엇입니까? (0) | 2023.05.17 |
WPF에서 현재 화면의 크기를 얻는 방법은 무엇입니까? (0) | 2023.05.17 |