투 도 를 위해,이모 티 콘 을 기어 오 르 자.
4856 단어 파충
def main():
page_queue = Queue(200)
img_queue = Queue(1000)
url_s = "http://www.doutula.com/photo/list/?page="
for i in range(1, 201):
url = url_s + str(i)
page_queue.put(url)
for i in range(5):
t = Producter(page_queue, img_queue)
t.start()
for i in range(5):
t = Consumer(page_queue, img_queue)
t.start()
if __name__ == '__main__':
main()
생산자 함수(Thread 모듈 계승):처음에 보험 을 들 었 을 때 저 는 headers 요청 헤드 를 구축 할 때 많은 정 보 를 추 가 했 습 니 다.User-agent,Accept,Cookie 를 포함 합 니 다.그리고 초기 함 수 를 구축 하고 슈퍼 를 사용 하여 부모 클래스 를 호출 하여 대상 을 변환 합 니 다.상세 한 해석 을 나 는 주석 에 썼 다.
class Producter(threading.Thread):
Headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36",
"Accept": r"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
"Cookie": "__cfduid=d8249568756fd0d224d02db36892b6a601558100044; UM_distinctid=16ad4b7a705a24-06142f93c274de-353166-144000-16ad4b7a706a56; _ga=GA1.2.859291572.1558346967; _gid=GA1.2.1511793670.1558346967; yjs_id=3c0fb66a6388207a130a52420586feb2; ctrl_time=1; XSRF-TOKEN=eyJpdiI6IjFuS2U2eEZqM1JCNFhDaUFObkpDS0E9PSIsInZhbHVlIjoidXR0bWx6UHVNWTUxdFlyWEl6THFsXC9UVUkxODRPaVVpcEIyM1NyNDJoSU96cWc1c29VcDg5VG5vTjlZblJMTlwvIiwibWFjIjoiYzg3OGRkOTQ3YWE2Nzk1YWU4ZTdlMzMyMjE4MTNiMDMzZTY0ODdkYzA0ODc5NGUwYTM5NjBkN2ZlOGVlN2JiMiJ9; doutula_session=eyJpdiI6InRod2pjNEpXQnNcL0RKYml2dGMzb2NRPT0iLCJ2YWx1ZSI6ImlaVE8yOXhVTVNoR0ZHWVRra2RsaTJieFlhVUdBZ3BZUllzdW5OZVJCWVRDT2pJckdsT2dneWdaeDdNWDhxazEiLCJtYWMiOiIwN2RhNmE0NjFhZTJjOTRmMzdhMThkZmJhNjYzNGMxYzA1M2RjYjcwZDg1NjcxMjQ0OWU3MDEyMjI5YzM0NzQ1In0%3D; CNZZDATA1256911977=1301539121-1558343450-%7C1558358613"
}
def __init__(self, page_queue, img_queue, *args, **kwargs):
super(Producter, self).__init__(*args, **kwargs)
self.page_queue = page_queue
self.img_queue = img_queue
def run(self):
while True:
if self.page_queue.empty(): #
break
url = self.page_queue.get() # page_ url
self.parse_url(url)
def parse_url(self, url): # url
response = requests.get(url, headers=self.Headers)
html = etree.HTML(response.text)
imgs = html.xpath("//div[@class='page-content text-center']//a//img")
for img in imgs:
url_img = img.get("data-original")
alt = img.get("alt")
try:
suffix = os.path.splitext(url_img)[1] # os
except:
continue
filename = alt + suffix
self.img_queue.put((url_img, filename)) # img_queue
time.sleep(0.5)
소비자 함수(Thread 모듈 계승):초기 함수 의 구축 은 생산자 와 마찬가지 로 request 모듈 의 url retrieve 함 수 를 사용 하여 이모 티 콘 을 로 컬 에 다운로드 합 니 다.이모 티 콘 의 이름 이 파일 이름 을 구성 할 수 없 는 것 에 대해 서 는 필요 없습니다.사실 페이지 는 replace 함수 나 re 모듈 의 sub 함 수 를 사용 하여 처리 할 수 있 습 니 다.
class Consumer(threading.Thread):
def __init__(self,page_queue, img_queue, *args, **kwargs):
super(Consumer, self).__init__(*args, **kwargs)
self.page_queue = page_queue
self.img_queue = img_queue
def run(self):
while True:
if self.page_queue.empty() and self.img_queue.empty(): #
break
url_img, filename = self.img_queue.get()
try:
request.urlretrieve(url_img, r"C:\Users\juno\Desktop\PYTHOY\python3-reptlie\test/" + filename)
print(filename + " ")
except FileNotFoundError:
continue
time.sleep(0.5)
마지막 으로 이번 파충류 가 사용 하 는 창고:
import requests
from lxml import etree
from urllib import request
import os
import time
import threading
from queue import Queue
기어 오 르 는 결과:결국 6 천 여 개 를 기어 오 르 지 않 고 밤 에 도 자야 한다(⊙⊙).
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
(1) 분포 식 파충류 Scrapy 는 어떻게 해 야 하나 요 - 설치Scrapy 의 설치 에 대해 인터넷 을 샅 샅 이 뒤 졌 습 니 다. 하나씩 설치 하 는 것 은 솔직히 좀 번 거 롭 습 니 다. 그럼 원 키 로 설치 한 것 이 있 습 니까?답 은 분명히 있 습 니 다. 다음은 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.