Python 을 사용 하여 필요 한 데 이 터 를 빠르게 기어 오 르 는 방법 을 알려 드 립 니 다.
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:여 기 는 파충류 의 이름 입 니 다.
1.파충류 의 용도
브 라 우 저의 기능 을 구현 하고 제 정 된 URL 을 통 해 사용자 가 필요 로 하 는 데 이 터 를 직접 되 돌려 줍 니 다.
일반 단계:
도 메 인 이름 에 대응 하 는 IP 주 소 를 찾 습 니 다(예 를 들 어 119.75.217.109 는 어느 사이트 입 니까?)4.567917.해당 IP 주소 에 get 또는 post 요청 을 보 냅 니 다
대응 하 는 내용 을 가 져 온 후에 분석 을 하려 면 한 텍스트 를 처리 하고 필요 한 내용 을 웹 페이지 의 코드 에서 추출 하 는 과정 이 필요 합 니 다.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./쌍 슬 래 쉬 는 루트 노드 를 찾 고 전문 을 스 캔 하 며 문서 에서 조건 에 맞 는 모든 내용 을 선택 하여 목록 의 형식 으로 되 돌려 줍 니 다
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
파 이 썬 을 사용 하여 필요 한 데 이 터 를 빠르게 오 르 는 방법 을 알려 드 리 는 이 글 은 여기까지 입 니 다.더 많은 파 이 썬 이 데 이 터 를 오 르 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.