도로의 데이터 - 파이썬 파충류 - URLLIB 라이브러리

참조 배우기 : https://www.cnblogs.com/alex3714/articles/8359358.html

A, URLLIB 라이브러리 도입

내장 된 HTTP 요청 파이썬 라이브러리는 URLLIB 라이브러리. 그것은 4 개의 모듈이 포함되어 있습니다

  • 요청 : HTTP 요청 모듈, 전송 요청을 시뮬레이션하는 데 사용할 수 있습니다.

  • 오류 : 예외 처리 모듈, 요청이 오류 인 경우, 우리는 그들을 잡아 한 다음 다시 시도하거나 다른 작업 프로그램이 예기치 않게 종료되지 않도록 할 수 있습니다.

  • 분석 : URL 파싱 모듈, 툴 모듈, 해상력, 해상도 및 결합 등의 URL 처리 방법을 제공한다.

  • robotparser : 로봇은 주로 사이트의 robots.txt 파일을 식별하는 데 사용되는 모듈을 분석 한 다음 사이트를 실제보다 적은 비용으로, 오르 허용되지 않는 사이트 오를 수를 결정.

두 요청 모듈

주요 기능 요청 모듈 : 개시 절차를 시뮬레이션 할 수있는 브라우저 요청을 사용하여 구성 HTTP 요청,

뿐만 아니라 모듈을 요청 : 인증 확인 (authenticaton), 재 (재) 브라우저의 쿠키 및 기타 콘텐츠에 대한.

1.urlopen 방법

 urllib.request.urlopen URL (데이터 없음 = [타임 아웃] * cafile에서 = 없음, capath에 = 없음, cadefault = 거짓, 문맥 = 없음)

urlopen 매개 변수 소개 :

  • 요청에 사용 된 URL URL

  • 데이터 : 통과하지 요청을 GET, POST 요청 전송

  • 제한 시간은 요청이 설정된 시간, 응답 없음을 초과하는 경우, 예외가 발생 즉, 제한 시간 (초)을 설정. 이 매개 변수가 지정되지 않은 경우, 전역 기본 시간을 사용합니다. 그것은, FTP 요청을 HTTP, HTTPS를 지원합니다.

  • ssl.SSLContext 컨텍스트 유형은 SSL 설정을 지정해야합니다.

  • CA 인증서를 지정 cafile에서

  • HTTPS 링크를 요청할 때 capath에이 CA 인증서의 경로를 지정,이 유용 할 것이다.

수입 urllib.parse의
 수입 urllib.request 

데이터 = 바이트 (urllib.parse.urlencode ({ ' 워드 ' : ' 안녕하세요 ' }) = 인코딩 ' UTF8 ' )
 인쇄 (데이터) 
응답 = urllib.request.urlopen ( " HTTP : //httpbin.org/post ' , = 데이터의 데이터)를
 인쇄 (response.read ())

2.Request 방법

클래스 urllib.request.Request (URL 데이터 = 없음, 헤더 = {} origin_req_host = 없음, 확인 불가능한 = 거짓, METHOD = 없음)

요청 매개 변수 소개 :

  • URL을 요청하는 데 사용되는 URL, 이것은 반드시 매개 변수이고, 다른 매개 변수는 선택 사항입니다.

  • 데이터를 전송하기 위해, 입력 바이트 (바이트 스트림) 통과해야한다. 이 사전은 경우를 urlencode () 코드에서 urllib.parse 모듈을 사용할 수 있습니다.

  • 헤더는 헤더 파라미터 설정 요구는 인스턴스 add_header 첨가 () 메소드를 호출하여 요청 될 수있는 경우 요청 헤더, 우리는 직접 구성 할 수있다, 사전이다. 추가 사용은 브라우저를 위장하기 위해 사용자 에이전트를 수정하여 가장 일반적인 요청 헤더입니다

  • origin_req_host는 호스트 이름 또는 요청 당사자의 IP 주소를 의미합니다.

  • 확인 불가능한이 요청이 검증되지 않았 음을 나타냅니다 기본값은 사용자가이 요청을 수신하는 결과를 선택할 수있는 권한이 없습니다 것을 의미 False입니다. 예를 들어, 우리는 그림에서 HTML 문서를 요청하지만, 우리는 이미지를 크롤링하는 자동 권한이 없습니다 다음, 확인 불가능한의 값은 TRUE '입니다.

  • 방법은 예컨대, POST를 얻고, 같은 놓는 요청을 표시하기 위해 사용되는 방법 문자열이다.


헤더 정보에 액세스 할 몇 가지 헤더를 수행해야합니다 사이트의 원인 마비를 크롤링 웹 사이트 크롤러에서 프로그램을 방지하기 위해 많은 웹 사이트가있다.

다음과 같이 헤더는 두 가지 방법을 추가합니다 :

방법 1 :

에서 URLLIB의 수입 요청, 구문 분석 

URL을 = ' http://httpbin.org/post ' 
헤더 = {
     ' 사용자 에이전트 ' : ' 모질라 / 4.0 (호환; MSIE 5.5; 윈도우 NT) ' ,
     ' 호스트 ' : ' httpbin. 조직 ' 
} 
딕셔너리 = {
     ' 이름 ' : " 알렉스 " 
} 
데이터 = 바이트 (parse.urlencode (딕셔너리) 인코딩 = " UTF- ') 
REQ= request.Request URL (URL = 데이터 = 데이터 헤더 = 헤더 METHOD = " POST " ) 
응답 = request.urlopen (REQ)
 인쇄 (response.read (). 디코딩 ( " UTF-8 " ))

방법 2 :

에서 URLLIB의 반입 요청을 파싱 

URL을 = ' http://httpbin.org/post ' 
딕셔너리 = {
     ' 이름 ' : ' Germey ' 
} 
데이터 = 바이트 (parse.urlencode (딕셔너리) 인코딩 = " UTF- ' ) 
REQ = 요청 .Request (URL = URL, 데이터 = 데이터, 방법 = ' POST ' ) 
req.add_header ( ' 사용자 에이전트 ' , ' 모질라 / 4.0 (호환; MSIE 5.5; 윈도우 NT) ' ) 
응답 =request.urlopen (REQ)
 인쇄 (response.read (). 디코딩 ( " UTF-8 " ))

- 처리기 프로세서

다른 모든 핸들러 클래스의 부모 인 BaseHandler 클래스에서 urllib.request 모듈.

일반적인 처리기 설명 :

  • HTTPDefaultErrorHandler : HTTP 응답 오류를 처리하기 위해, 오류가 HTTPError 예외 유형을 발생합니다.

  • HTTPRedirectHandler : 재 처리합니다.

  • HTTPCookieProcessor : 쿠키를 처리합니다.

  • ProxyHandler : 프록시 기본 프록시를 설정하는 데 사용 비어 있습니다.

  • HTTPPasswordMgr : 사용자 이름과 암호의 목록을 유지 암호를 관리 할 수 ​​있습니다.

  • HTTPBasicAuthHandler : 관리 인증, 인증 링크가 열려있는 경우, 당신은 인증 문제를 해결하는 데 사용할 수 있습니다 필요합니다.

3. 연기 ProxyHandler

Proxyhandler 매개 변수가 사전 키 이름 (예 : HTTP 또는 HTTPS 등) 프로토콜 유형, 키 링크 에이전트는을이다, 당신은 더 많은 에이전트를 추가 할 수 있습니다.

그리고, 이것과 함께 - 요청을 전송 한 후, 따개를 구성하는 build_opener 처리기 () 메소드.

from urllib.error import URLError
from urllib.request import ProxyHandler, build_opener
 
proxy_handler = ProxyHandler({
    'http': 'http://127.0.0.1:9743',
    'https': 'https://127.0.0.1:9743'
})
opener = build_opener(proxy_handler)
try:
    response = opener.open('https://www.baidu.com')
    print(response.read().decode('utf-8'))
except URLError as e:
    print(e.reason)

3.cookies

cookie中保存中我们常见的登录信息,有时候爬取网站需要携带cookie信息访问,这里用到了http.cookijar,用于获取cookie以及存储cookie

# 从网页获取cookie,并逐行输出
import http.cookiejar, urllib.request
 
cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
for item in cookie:
    print(item.name+"="+item.value)

# 从网页获取cookie,保存为文件格式
filename = 'cookies.txt'
cookie = http.cookiejar.MozillaCookieJar(filename)  # cookie = http.cookiejar.LWPCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
cookie.save(ignore_discard=True, ignore_expires=True)

PS:MozillaCookieJar是CookieJar的子类,LWPCookieJar与MozillaCookieJar均可读取、保存cookie,但格式不同

调用load()方法来读取本地的Cookies文件,获取到了Cookies的内容

cookie = http.cookiejar.LWPCookieJar()
cookie.load('cookies.txt', ignore_discard=True, ignore_expires=True)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
print(response.read().decode('utf-8'))

三、error模块

from urllib import request, error
try:
    response = request.urlopen('http://cuiqingcai.com/index.htm')
except error.URLError as e:
    print(e.reason)

四、parse模块

urlparse()
urlunparse()
urlsplit()
urlunsplit()
urljoin()
urlencode()
parse_qs()
parse_qsl()
quote()
unquote()

五、robotparser模块

Robots协议也称作爬虫协议、机器人协议,它的全名叫作网络爬虫排除标准(Robots Exclusion Protocol),用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取。它通常是一个叫作robots.txt的文本文件,

一般放在网站的根目录下。www.taobao.com/robots.txt

robotparser模块提供了一个类RobotFileParser,它可以根据某网站的robots.txt文件来判断一个爬取爬虫是否有权限来爬取这个网页。

urllib.robotparser.RobotFileParser(url='')

# set_url():用来设置robots.txt文件的链接。
# read():读取robots.txt文件并进行分析。
# parse():用来解析robots.txt文件。
# can_fetch():该方法传入两个参数,第一个是User-agent,第二个是要抓取的URL。
# mtime():返回的是上次抓取和分析robots.txt的时间。
# modified():将当前时间设置为上次抓取和分析robots.txt的时间。
from urllib.robotparser import RobotFileParser
 
rp = RobotFileParser()
rp.set_url('http://www.jianshu.com/robots.txt')
rp.read()
print(rp.can_fetch('*', 'http://www.jianshu.com/p/b67554025d7d'))
print(rp.can_fetch('*', "http://www.jianshu.com/search?q=python&page=1&type=collections"))

추천

출처www.cnblogs.com/Iceredtea/p/11286037.html