Python 을 사용 하여 필요 한 데 이 터 를 빠르게 기어 오 르 는 방법 을 알려 드 립 니 다.

1.기초 제3자 라 이브 러 리 사용
1.기본 사용법

""" """
from urllib import request
response = request.urlopen(r'http://bbs.pinggu.org/') 
#     200      
print("     :  "+str(response.status))
#               ,     UTF-8   ,       
#  “charset”      
response.read().decode('gbk')[:100]
在这里插入图片描述
2.Request
요청 을 request()로 포장 하고 urlopen()을 통 해 페이지 를 가 져 옵 니 다.속칭 위장.서버 에 우리 가 브 라 우 저 를 통 해 방문 한 페이지 라 는 것 을 알 리 면 어떤 경우 에는 직접 죽 을 수도 있다.

url = r'http://bbs.pinggu.org/'
headers = {'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
           r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
           'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',
           'Connection': 'keep-alive'}
req = request.Request(url, headers=headers)
page = request.urlopen(req).read()
page = page.decode('gbk')
page[:100]
在这里插入图片描述
data 를 포함 하 는 방법.
在这里插入图片描述

import urllib.parse
url = r'https://new-api.meiqia.com/v1/throttle/web?api_name=%2Fvisit%2Finit&ent_id=7276&v=1534848690048'
headers = {'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
           r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
           'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',
           'Connection': 'keep-alive'}
values={'api_name':'/visit/init','ent_id':'7276','v':'1534848690048'}
data = urllib.parse.urlencode(values).encode(encoding='UTF8')
req = request.Request(url, data,headers=headers)
page = request.urlopen(req).read()
page = page.decode('gbk')
3.이상 처리

from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
req = Request("//www.jb51.net /")
try:
    response = urlopen(req)
except HTTPError as e:
    print('         .')
    print('    : ', e.code)
except URLError as e:
    print('       .')
    print('  : ', e.reason)
else:
    print("OK!")
    print(response.read().decode("utf8"))
在这里插入图片描述

from urllib.request import Request, urlopen
from urllib.error import  URLError
req = Request("//www.jb51.net /")
try:
    response = urlopen(req)
except URLError as e:
    if hasattr(e, '  '):
        print('       .')
        print('  : ', e.reason)
    elif hasattr(e, '  '):
        print('         .')
        print('    : ', e.code)
    else:
        print("OK!")
        print(response.read().decode("utf8"))
在这里插入图片描述
4.HTTP 인증

import urllib.request
 
#          
user = "user_name"
#          
passwd = "uesr_password"
#   IP                      
proxyserver = "177.87.168.97:53281"
# 1.           ,               
passwdmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
# 2.       ,     realm             ,         None,               、   、  
passwdmgr.add_password(None, proxyserver, user, passwd)
# 3.            /     ProxyBasicAuthHandler     ,            
#     ,        ProxyHandler  
proxyauth_handler = urllib.request.ProxyBasicAuthHandler(passwdmgr)
# 4.    build_opener()        Handler  ,     opener  ,        proxy_handler   proxyauth_handler
opener = urllib.request.build_opener(proxyauth_handler)
# 5.   Request   
request = urllib.request.Request("http://bbs.pinggu.org/")
# 6.      opener    
response = opener.open(request)
# 7.       
print (response.read())
5.ROBOT 프로 토 콜
대상 사이트 주소 뒤에/robots.txt 를 추가 합 니 다.예 를 들 어:https://www.jd.com/robots.txt
在这里插入图片描述
첫 번 째 뜻 은 모든 파충류 에 대해 서 는 기어 갈 수 없다 는 것 이다/?시작 경로 도/pp/*.html 와 일치 하 는 경로 에 접근 할 수 없습니다.
뒤에 있 는 네 명의 사용자 에이전트 의 파충 류 는 어떠한 자원 에 도 접근 할 수 없습니다.
그래서 Robots 프로 토 콜 의 기본 문법 은 다음 과 같다.
User-agent:여 기 는 파충류 의 이름 입 니 다.
  • Disallow:/이 파충류 가 접근 할 수 없 는 내용.
  • 2.파충류 의 홈 페이지 캡 처
    1.파충류 의 용도
    브 라 우 저의 기능 을 구현 하고 제 정 된 URL 을 통 해 사용자 가 필요 로 하 는 데 이 터 를 직접 되 돌려 줍 니 다.
    일반 단계:
    도 메 인 이름 에 대응 하 는 IP 주 소 를 찾 습 니 다(예 를 들 어 119.75.217.109 는 어느 사이트 입 니까?)4.567917.해당 IP 주소 에 get 또는 post 요청 을 보 냅 니 다
  • 서버 에 해당 하 는 결과 200,웹 페이지 내용 을 되 돌려 줍 니 다
  • 4.567917.원 하 는 것 을 잡 아 보 세 요.2.웹 분석
    대응 하 는 내용 을 가 져 온 후에 분석 을 하려 면 한 텍스트 를 처리 하고 필요 한 내용 을 웹 페이지 의 코드 에서 추출 하 는 과정 이 필요 합 니 다.BeautifulSoup 은 일반적인 문서 내 비게 이 션,검색,수정 기능 을 실현 할 수 있 습 니 다.lib 폴 더 에 BeautifulSoup 사용 명령 줄 이 없 으 면 설치 하면 됩 니 다.
    
    pip install BeautifulSoup
    3.데이터 추출
    
    #                  ,     
    from bs4 import BeautifulSoup
    soup = BeautifulSoup('<meta content="all" name="robots" />',"html.parser")
    tag=soup.meta
    
    # tag   
    type(tag)
    >>> bs4.element.Tag
    
    # tag name  
    tag.name
    >>> 'meta'
    
    # attributes  
    tag.attrs
    >>> {'content': 'all', 'name': 'robots'}
    
    # BeautifulSoup  
    type(soup)
    >>> bs4.BeautifulSoup
    soup.name
    >>> '[document]'
    
    #       
    markup='<b><a href="http://house.people.com.cn/" rel="external nofollow"  target="_blank">  </a></b>'
    soup=BeautifulSoup(markup,"lxml")
    text=soup.b.string
    text
    >>> '  '
    type(text)
    >>> bs4.element.NavigableString
    
    4.BeautifulSoup 응용 예
    
    import requests
    from bs4 import BeautifulSoup
    url = "http://www.cwestc.com/MroeNews.aspx?gd=2"
    html = requests.get(url)
    soup =  BeautifulSoup(html.text,"lxml")
    
    在这里插入图片描述
    
    #                
    from bs4 import BeautifulSoup
    soup=BeautifulSoup(html.text,"lxml")
    
    #  
    lptable = soup.find('table',width='780')
    
    #   
    for i in lptable.find_all("td",width="680"):    
        title = i.b.strong.a.text
        href = "http://www.cwestc.com"+i.find('a')['href']
    #     href = i.find('a')['href']
        date = href.split("/")[4]
        print (title,href,date)
    
    在这里插入图片描述
    4.Xpath 응용 예시
    XPath 는 XML 문서 에서 정 보 를 찾 는 언어 입 니 다.XPath 는 XML 문서 에서 요소 와 속성 을 옮 겨 다 니 는 데 사용 할 수 있 습 니 다.XPath 는 W3C XSLT 표준 의 주요 요소 이 고 XQuery 와 XPointer 는 모두 XPath 표현 위 에 구축 되 었 다.
    네 가지 라벨 사용 방법
    4.567917./쌍 슬 래 쉬 는 루트 노드 를 찾 고 전문 을 스 캔 하 며 문서 에서 조건 에 맞 는 모든 내용 을 선택 하여 목록 의 형식 으로 되 돌려 줍 니 다
  • /단일 슬 래 쉬 는 현재 탭 경로 의 다음 경로 라벨 을 찾 거나 현재 탭 내용 을 조작 합 니 다
  • 현재 경로 의 텍스트 내용 을 가 져 옵 니 다현재 경로 에서 라벨 의 속성 치 를 추출 합 니 다
  • |선택 가능 한 문자 사용|몇 가지 경 로 를 선택 할 수 있 습 니 다.예 를 들 어/p|/div 는 현재 경로 에서 조건 에 맞 는 p 태그 와 div 라벨 을 선택 할 수 있 습 니 다
  • 점 은 현재 노드 를 선택 하 는 데 사 용 됩 니 다
  • 4.567917...두 점 은 현재 노드 의 부모 노드 를 선택한다
    
    from lxml import etree
    
    html="""
    <!DOCTYPE html>
    <html>
    <head lang="en">
        <title>test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
    <div id="content">
        <ul id="ul">
            <li>NO.1</li>
            <li>NO.2</li>
            <li>NO.3</li>
        </ul>
        <ul id="ul2">
            <li>one</li>
            <li>two</li>
        </ul>
    </div>
    <div id="url">
        <a href="http://www.crossgate.com" rel="external nofollow"  title="crossgate">crossgate</a>
        <a href="http://www.pinggu.org" rel="external nofollow"  title="pinggu">pinggu</a>
    </div>
    </body>
    </html>
    """
    
    #    id       div ul      text()      
    selector=etree.HTML(html)
    content=selector.xpath('//div[@id="content"]/ul[@id="ul"]/li/text()') 
    for i in content:
        print (i)
    
    在这里插入图片描述
    
    #    //           a  ,  “@    ”  a   href   
    con=selector.xpath('//a/@href') 
    for i in con:
        print (i)
    在这里插入图片描述
    
    #       #                 
    con=selector.xpath('/html/body/div/a/@title') 
    print (len(con))
    print (con[0],con[1])
    在这里插入图片描述
    3.동적 웹 페이지 와 정적 웹 페이지 의 구분
    원본 바 이 두:
    정적 웹 페이지 의 기본 개요
    정적 웹 페이지 의 주소 형식 은 보통.htm,.html,.shtml,.xml 등 을 접미사 로 한다.정적 웹 페이지 는 일반적으로 가장 간단 한 HTML 웹 페이지 로 서버 쪽 과 클 라 이언 트 가 같 고 스 크 립 트 와 애플 릿 이 없 기 때문에 움 직 일 수 없습니다.HTML 형식의 웹 페이지 에서 도 각종 동적 효과 가 나타 날 수 있다.예 를 들 어 GIF 형식의 애니메이션,FLASH,스크롤 자모 등 이다.이런'동적 효과'는 시각 적 인 것 일 뿐 아래 에 소개 할 동적 웹 페이지 와 는 다른 개념 이다.
    정적 웹 페이지 의 특징
    4.567917.정적 웹 페이지 는 모든 웹 페이지 에 고정된 URL 이 있 고 웹 페이지 URL 은'htm,html,shtml 등 흔히 볼 수 있 는 형식 으로 접미사 가 있 으 며'?'가 포함 되 어 있 지 않 습 니 다4.567917.웹 페이지 의 내용 이 사이트 서버 에 발표 되면 사용자 가 방문 하 든 안 하 든 모든 정적 웹 페이지 의 내용 은 사이트 서버 에 저 장 된 것 이다.즉,정적 웹 페이지 는 서버 에 실제 저 장 된 파일 이 고 모든 웹 페이지 는 독립 된 파일 이다4.567917.정적 웹 페이지 의 내용 이 상대 적 으로 안정 적 이기 때문에 검색엔진 에 의 해 검색 되 기 쉽다4.567917.정태 적 인 웹 페이지 는 데이터 뱅 크 의 지원 이 없고 사이트 제작 과 유지 에 있어 작업량 이 많 기 때문에 사이트 의 정 보 량 이 많 을 때 정태 적 인 웹 페이지 제작 방식 에 의존 하 는 것 이 비교적 어렵다4.567917.정태 적 인 웹 페이지 의 상호작용 이 교차 되 고 기능 에 있어 비교적 큰 제한 이 있다동적 웹 페이지 의 기본 개술
    동적 웹 페이지 는.asp,.jsp,.php,.perl,.cgi 등 형식 을 접미사 로 하고 동적 웹 사이트 주소 에 상징적 인 기호 인'?'가 있다.동적 웹 페이지 는 웹 페이지 의 각종 애니메이션,자막 스크롤 등 시각 적 인'동적 효과'와 직접적인 관계 가 없다.동적 웹 페이지 는 순수한 문자 내용 일 수도 있 고 각종 애니메이션 내용 을 포함 할 수도 있다.이런 것들 은 웹 페이지 의 구체 적 인 내용 의 표현 형식 일 뿐 웹 페이지 가 동적 효과 가 있 든 없 든동적 사이트 기술 로 생 성 된 웹 페이지 를 모두 동적 페이지 라 고 부른다.동적 사이트 도 정적 결합의 원칙 을 채택 할 수 있 고 동적 웹 페이지 를 사용 하 는 곳 에 동적 웹 페이지 를 사용 하기에 적합 하 다.정적 웹 페이지 를 사용 할 필요 가 있다 면 정적 웹 페이지 의 방법 으로 실현 하 는 것 을 고려 할 수 있다.같은 사이트 에서동적 웹 페이지 내용 과 정적 웹 페이지 내용 이 동시에 존재 하 는 것 도 흔 한 일이 다.
    동적 웹 페이지 는 다음 과 같은 몇 가지 특색 을 가 져 야 한다.
    4.567917.상호작용 성:즉,웹 페이지 는 사용자 의 요구 와 선택 에 따라 동태 적 으로 변화 하고 응답 할 것 이다.예 를 들 어 방문 자 는 웹 페이지 에 폼 정 보 를 작성 하고 제출 하 며 서버 는 처 리 를 통 해 정 보 를 백 엔 드 데이터베이스 에 자동 으로 저장 하고 해당 알림 페이지 를 엽 니 다4.567917.자동 업데이트:즉,수 동 으로 조작 하지 않 아 도 새로운 페이지 가 자동 으로 생 성 되 고 작업량 을 크게 절약 할 수 있 습 니 다.예 를 들 어 포럼 에서 정 보 를 발표 하면 백 스테이지 서버 는 자동 으로 새로운 웹 페이지 를 생 성 할 것 이다4.567917.임 의 성:즉,묻 지 않 는 시간,묻 지 않 는 사람 이 같은 사 이 트 를 방문 할 때 서로 다른 페이지 효 과 를 나타 낸다.예 를 들 어 로그 인 인터페이스 자동 순환 기능..동적 웹 페이지 의"?"검색엔진 검색 에 어느 정도 문제 가 존재 합 니 다.검색엔진 은 보통 한 사이트 의 데이터 베이스 에서 모든 웹 페이지 를 방문 할 수 없 거나 기술적 인 고려 로 거 미 를 검색 할 때 인터넷 주 소 를 잡지 않 습 니 다."?"뒤의 내용 은 동적 웹 페이지 의 사 이 트 를 이용 하여 검색엔진 홍 보 를 할 때 일정한 기술 처 리 를 해 야 검색엔진 의 요구 에 적응 할 수 있다결론 적 으로 보면 페이지 내용 이 바 뀌 면 사이트 주소 도 바 뀌 고 대체적으로 정적 페이지 이 며 반대로 동적 페이지 이다.
    4.동적 웹 페이지 와 정적 웹 페이지 의 캡 처
    1.정적 웹 페이지
    
    import requests
    from bs4 import BeautifulSoup
    url = "http://www.cwestc.com/MroeNews.aspx?gd=1"
    html = requests.get(url)
    soup =  BeautifulSoup(html.text,"lxml")
    soup.text[1900:2000]
    
    在这里插入图片描述
    
    import requests
    from bs4 import BeautifulSoup
    url = "http://www.cwestc.com/MroeNews.aspx?gd=2"
    html = requests.get(url)
    soup =  BeautifulSoup(html.text,"lxml")
    soup.text[1900:2000]
    
    在这里插入图片描述
    요약:위의 2 개의 url 차 이 는 마지막 숫자 에 있 습 니 다.원래 웹 페이지 에서 다음 페이지 의 주소 와 내용 이 동시에 변화 합 니 다.우 리 는 이 웹 페이지 가 정적 웹 페이지 라 고 판단 합 니 다.
    2.동적 웹 페이지
    
    import requests
    from bs4 import BeautifulSoup
    url = "http://news.cqcoal.com/blank/nl.jsp?tid=238"
    html = requests.get(url)
    soup =  BeautifulSoup(html.text,"lxml")
    soup.text
    
    在这里插入图片描述
    在这里插入图片描述
    이 페이지 를 캡 처 하면 동적 페이지 임 을 증명 할 수 없습니다.정확 한 캡 처 방법 은 다음 과 같 습 니 다.
    在这里插入图片描述
    
    import urllib
    import urllib.request
    import requests
    
    url = "http://news.cqcoal.com/manage/newsaction.do?method:webListPageNewsArchivesByTypeid"
    post_param = {'pageNum':'1',\
                  'pageSize':'20',\
                  'jsonStr':'{"typeid":"238"}'}
    return_data = requests.post(url,data =post_param)
    content=return_data.text
    content
    
    在这里插入图片描述
    파 이 썬 을 사용 하여 필요 한 데 이 터 를 빠르게 오 르 는 방법 을 알려 드 리 는 이 글 은 여기까지 입 니 다.더 많은 파 이 썬 이 데 이 터 를 오 르 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기