파이썬 웹 스크래핑에서 proxy를 통한 https 액세스가 requests를 사용하면 쉬웠습니다.

Python3에서 urllib과 Beautifulsoup으로 웹 스크래핑에 도전하고 있습니다.
이전에는 프록시가 있기 때문에 통신 오류가 발생하는 것을 해결했습니다.
파이썬 웹 스크래핑에서 프록시 설정으로 인해 응답이 없을 때 해결
http에 의한 통신은 상기의 방법으로 잘 되었지만, https의 사이트가 되었을 때에 통신이 확립되지 않고 에러가 되어 버렸습니다.
최근 웹사이트는 https가 많기 때문에 곤란했습니다. .
전회의 방법으로 아래와 같이 proxies에 "https"의 항목을 추기해도 해결되지 않습니다.
proxies={"http":"http:proxy.-----.co.jp/proxy.pac",
"https":"http:proxy.-----.co.jp/proxy.pac"}

조사하고 있으면, requests 라는 라이브러리가 있었습니다. urllib 대신 사용할 수 있는지 시도해 보면 놀랍도록 쉽게 해결되었습니다.

사용법 예는 다음과 같습니다.

requsts_sample.py
import requests

proxies = {
"http":"http://proxy.-----.co.jp/proxy.pac",
"https":"http://proxy.-----.co.jp/proxy.pac"
}
r = requests.get('https://github.com/timeline.json', proxies=proxies)
print(r.text)

Beautifulsourp 를 사용하는 경우는, requests.get 로 취득한 오브젝트의 content 를 건네주면 되는 것 같습니다.
간단한 샘플을 보여줍니다.
import requests
from bs4 import BeautifulSoup

proxies = {
'http':'http://proxy.-----.co.jp/proxy.pac',
'https':'http://proxy.-----.co.jp/proxy.pac'
}

def getBS(url):
    html = requests.get(url, proxies=proxies)
    bsObj = BeautifulSoup(html.content, "html.parser")
    return bsObj

htmlSource = getBS("https://en.wikipedia.org/wiki/Kevin_Bacon")

# ページに存在するリンク先を表示する
for link in htmlSource.findAll("a"):
    if 'href' in link.attrs:
        print(link.attrs['href'])


requests 라이브러리는 Anaconda에서 Python 3.5.2를 설치할 때 들어있었습니다.
Anaconda Navigator에서 설치한 패키지를 확인할 수 있습니다. Windows에서 GUI를 설치한 경우 Windows->모든 프로그램->Anaconda3->Anaconda Navigator에 있습니다.

requests 라이브러리의 Quickstart는 이쪽

좋은 웹페이지 즐겨찾기