>백엔드 개발 >파이썬 튜토리얼 >Python 크롤러 [1] 소녀 사진을 일괄 다운로드

Python 크롤러 [1] 소녀 사진을 일괄 다운로드

PHPz
PHPz원래의
2017-04-04 10:49:545121검색

Jiedan.com의 소녀 사진 특집에는 매우 높은 품질의 아름다움이 있습니다.사진 , 오늘은 python을 사용하여 이러한 소녀 사진을 일괄 다운로드하는 데 필요한 지식과 도구를 공유하겠습니다.

#1

이해하세요. 이 글에서는 list, for…in…의 연산 방법과 함수 정의만 알면 됩니다. 사용하면서 웹페이지 크롤링, 분석, 파일 저장 기능을 알아보세요. ulSoup4. 최신 버전의 Python에는 Windows에서 windows+x 단축키를 누르는 것이 매우 편리합니다. 명령 프롬프트(관리자)를 열고

pip install beautifulsoup4

Enter를 누르고 실행

을 입력하세요.

성공적으로 설치되었거나 그런 것이 나타납니다. 프롬프트 메시지는 설치가 완료되었음을 나타냅니다.

#3Python 크롤러 [1] 소녀 사진을 일괄 다운로드 그러나 보기 위한 브라우저입니다.
chrome 및 firefox

와 같은 소스 코드 및 보기 요소가 필요합니다(pip가 없는 경우 pip 설치 방법을
검색

하세요. .)

1. 웹페이지 다운로드

2개를 다운로드하고 싶습니다. 천 개가 넘는 웹페이지에 있는 모든 이미지를 보려면 먼저 웹페이지를 다운로드하는 방법을 배워야 합니다 :) 연습다운로드 URL은 jandan.net/ooxx/page-2397#comments입니다. 크롬 또는 파이어폭스 브라우저를 사용하여 웹페이지를 마우스 오른쪽 버튼으로 클릭하고 표시되는 웹페이지를 확인하세요. html, js

, css 등을 사용하여 작성한 소스 코드를 파싱한 후 브라우저에 접속합니다. 이러한 소스 코드에는 주소가 포함되어 있으므로 첫 번째 단계는 html 코드를 다운로드하는 것입니다. 🎜>

코드 일부 가로채기


파이썬 내장 사용 웹 페이지를 다운로드하기 위한 urllib.request 라이브러리는 여러 프로토콜을 사용하여 URL에 액세스하고 여는 확장 가능한 라이브러리입니다.

Python 크롤러 [1] 소녀 사진을 일괄 다운로드
import urllib.request


url = 'http://jandan.net/ooxx/page-2397#comments'


res = urllib.request.urlopen(url)

Python 크롤러 [1] 소녀 사진을 일괄 다운로드
urllib.request.urlopen() 이 함수는 무엇을 합니까? 이름에서 알 수 있듯이 URL을 여는 데 사용할 수 있습니다. str(우리가 전달한 것) 또는 Request

객체

를 허용할 수 있습니다. 이
함수

의 반환 값은 항상 컨텍스트 관리자처럼 작동할 수 있는 객체이며 geturl(), info() 및 getcode()와 같은 자체 메서드를 가지고 있습니다.

사실 그다지 걱정할 필요는 없습니다. 이 함수가 URL을 받아들인 다음 이 URL의 모든 정보가 포함된 개체를 반환할 수 있다는 점만 기억하면 됩니다. 우리는 이 개체를 작업합니다.


이제 res 객체의 html 코드를 읽고

변수

html에 할당합니다. res.read() 메서드를 사용하세요.

html = res.read()

이때 html 소스코드가 html로 저장되어 있어요! 인쇄해 보세요(html)



코드 일부를 가로채었습니다.

이때, 마우스 오른쪽 버튼을 클릭하여 웹페이지의 소스코드를 보면 나타나는 내용과 결과가 다른 것을 발견하게 됩니다. read() 메서드의 반환 값은 n 바이트인 것으로 밝혀졌습니다. 이것은 도대체 무엇입니까? 음, 실제로 우리는 이 반환 값을 구문 분석하고 이미지 주소를 얻을 수 있습니다. 그러나 브라우저에 표시되는 것과 동일한 HTML 코드를 얻으려면 이전 코드 줄을

html = res.read().decode('utf-8)로 변경할 수 있습니다. ')

그 다음 인쇄(html)


Python 크롤러 [1] 소녀 사진을 일괄 다운로드


코드의 일부가 차단되었습니다.

좋아요! 마찬가지입니다. 이는 read()의 decode('utf-8')가 read()의 반환 값을 utf-8로 인코딩할 수 있기 때문입니다. 그러나 우리는 필요한 정보도 포함하고 있기 때문에 여전히 html = res.read()를 사용합니다.

지금까지 우리는 웹페이지 http://jandan.net/ooxx/page-2397#comments의 html 코드를 다운로드하고 html 변수에 저장하기 위해 Python 코드 4줄만 사용했습니다. 다음과 같습니다:

import urllib.request

#Download webpage

url = 'http://jandan.net/ooxx/page-2397 # comments'

res = urllib.request.urlopen(url)

html = res.read()

2. 주소 파싱

다음으로 beautifulsoup4를 사용하여 html을 구문 분석합니다.

특정 사진에 해당하는 HTML 코드가 어디에 있는지 어떻게 확인하나요? 페이지를 마우스 오른쪽 버튼으로 클릭 - 검사. 이때, 화면 왼쪽이 원본 웹페이지이고, 화면 오른쪽이 HTML 코드와 기능버튼 뭉치입니다.


Python 크롤러 [1] 소녀 사진을 일괄 다운로드


요소 왼쪽에 선택 화살표가 있으니 클릭하시면 됩니다. 파란색으로 변한 후 왼쪽 웹 페이지의 그림을 클릭하면 오른쪽 HTML 코드의 코드 부분이 자동으로 강조 표시되는 것을 볼 수 있습니다. 코드의 이 부분이 이 사진에 해당하는 HTML 코드입니다! 이 화살표는 웹 페이지의 요소에 해당하는 코드를 찾는 데 사용됩니다.


Python 크롤러 [1] 소녀 사진을 일괄 다운로드


이 코드를 주의 깊게 살펴보세요.

할 수 있습니다. src="//wx2.sinaimg.cn/mw600/66b3de17gy1fdrf0wcuscj20p60zktad.jpg" 부분이 이 사진의 주소이고, src가 출처입니다. src 다음의 스타일이 해당 스타일이므로 걱정하지 마세요. 이때 시도해 볼 수 있습니다. src 앞에 http:를 추가하고 http://wx2.sinaimg.cn/mw600/66b3de17gy1fdrf0wcuscj20p60zktad.jpg를 방문하면 원본 사진을 볼 수 있습니다.


그래서 src에 해당하는 콘텐츠가 우리에게 필요한 이미지 링크 주소입니다. 참고로 그림에서 src와 이미지 주소 링크, 스타일, max-widthkey-value와 유사합니다. 이는 나중에 이미지의 주소를 추출하기 위해 사용하는 방법과 관련이 있습니다.

다른 이미지에 해당하는 코드를 보면 형식이 동일한 것을 볼 수 있습니다. 즉, 모두 에 포함되어 있습니다.

html을 구문 분석하려면 BeautifulSoup()을 사용하세요. html을 전달하는 것 외에도 'html.parser' 매개변수도 전달합니다. 이는 BeautifulSoup() 함수가 html의 구문 분석 방법에 따라 변수 html을 구문 분석하기를 원함을 나타냅니다. 파서는 구문 분석을 의미합니다.

soup = BeautifulSoup(html,'html.parser')

이 코드 줄은 html을 수프 객체로 구문 분석합니다. 우리는 이 객체를 매우 편리하게 조작할 수 있습니다. 예를 들어 'img'가 포함된 텍스트 콘텐츠만 추출합니다.

result = Soup.find_all('img')

find_all() 메서드를 사용하세요.

print(result) 결과는 목록이고 각 요소는 src-image 주소 키-값 쌍이지만 여기에는 필요하지 않습니다.


Python 크롤러 [1] 소녀 사진을 일괄 다운로드


이 코드 일부를 가로채었습니다.

get 메소드를 사용하여 큰따옴표로 묶인 주소를 추출하고 시작 부분에 http:를 추가합니다.

links=[]

결과 콘텐츠:

links.append('http:'+content .get('src'))

content.get('src') 은 content의 src 키에 해당하는 값, 즉 큰따옴표로 묶인 주소를 가져오는 것입니다.

links.append()는 목록에 요소를 추가하는 일반적인 방법입니다.

print(links) 이 목록의 각 요소는 큰따옴표로 묶인 원본 이미지 주소임을 확인할 수 있습니다. 아래와 같습니다.


Python 크롤러 [1] 소녀 사진을 일괄 다운로드


인터페이스된 코드 부분

브라우저를 사용하여 주소를 열면 해당 사진을 볼 수 있습니다! 에야디야! 이는 우리가 마지막 단계인 다운로드를 진행하고 있음을 의미합니다!

주소 추출 부분이 완료되었습니다. 코드도 다음과 같이 매우 간결합니다.

#Parse 웹 페이지

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'html.parser')

결과 = 수프 .find_all('img')

links=[]

결과의 콘텐츠:

links.append('http:'+content.get('src' ) )

3. 사진 다운로드

마지막 단계는 링크에 있는 주소를 순차적으로 방문해서 사진을 다운로드하는 것!

처음에

import os

먼저 다운로드한 사진을 저장할 사진 폴더를 생성합니다. 다음 코드는 여기에 사진 폴더를 생성합니다. program.py 파일이 있습니다.

그렇지 않은 경우 os.path.exists('photo'):

os.makedirs('photo')

링크는 목록이라는 것을 알고 있으므로 loop를 사용하여 하나씩 다운로드하고 이름을 지정하고 저장하는 것이 가장 좋습니다.



i=0

링크의 링크:

i+=1

filename ='photo\'+'photo'+str(i)+'.png'

with open(filename,'w' ) as file:

urllib.request.urlretrieve(link,filename)

i는 루프 변수이고, i+=1은 루프를 제어하는 ​​명령문입니다.

filename은 이미지의 이름을 지정하지만 실제로는 이 이름의 파일을 먼저 만든 다음 이미지를 그 안에 씁니다. 파일명의 할당문을 보면 알 수 있듯이 'photo\'는 photo 폴더에 위치하고 있음을 의미하며, 다음의 'photo'+str(i)는 전체 다운로드가 완료된 후의 순서임을 나타냅니다. photo1, photo2, photo3처럼 ~ '.png'가 접미사입니다. 문자열을 연결하기 위해 + 기호를 사용하는 것도 Python에서는 일반적인 관행입니다.

이 두 줄의 명령문을 사용하여 링크의 주소가 가리키는 이미지를 로컬에서 가져온 다음 파일 이름에 저장합니다.

open(filename,'w'), 파일명 폴더를 엽니다. 'w'는 열기 방법이 쓰기라는 의미입니다. 즉, open()은 여기서 두 개의 매개변수를 받아들입니다. 하나는 파일 이름(파일 경로)이고 다른 하나는 열기 방법입니다.

urllib.request.urlretrieve(link,filename)의 기능은 링크 링크에 액세스한 후 복사본을 검색하여 filename에 넣는 것입니다.

3개의 파트를 모두 작성한 후 실행을 클릭하세요! .py 파일이 있는 경로에서 사진 폴더를 찾으실 수 있습니다. 그 안에는 우리가 다운로드한 사진들이 가득해요~


Python 크롤러 [1] 소녀 사진을 일괄 다운로드


전체 코드는 다음과 같습니다.

import urllib.request

from bs4 import BeautifulSoup

os 가져오기

#웹페이지 다운로드

url = 'http://jandan.net/ooxx/page-2397#comments'

res = urllib.request.urlopen (url)

html = res.read()

#Parse 웹페이지

soup = BeautifulSoup(html,'html.parser')

결과 = Soup.find_all('img ')

links=[]

결과의 콘텐츠:

links.append('http:'+content.get(' src'))

#사진 다운로드 및 저장

그렇지 않은 경우 os.path.exists('photo'):

os.makedirs('photo')

i=0

링크의 링크:

i+=1

filename ='photo\'+'photo'+str(i)+' .png'

open(filename,'w') 파일:

urllib.request.urlretrieve(link,filename)

이 작은 프로그램은 프로세스 지향으로 간주되며 위에서 아래로 정의된 기능이 없습니다. 초보자들이 이해하기 더 쉬울 수도 있습니다.

여자 사진 링크

http://jandan.net/ooxx/page-2397#comments 가운데 숫자만 1~2XXX 사이에서 변경됩니다.

url = 'http://jandan.net/ooxx/page-'+str(i)+'#comments'

i 값만 변경하면 됩니다. 일괄 다운로드됩니다. 하지만 일부 댓글에서는 이 웹사이트를 자주 방문하면 IP가 차단될 수 있다는 의견이 있습니다. 이해가 되지 않으니 직접 시도해 보세요!

위 내용은 Python 크롤러 [1] 소녀 사진을 일괄 다운로드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.