1. 벌새 순 이미지 - 소개
건국 기념일 휴일이 끝난, 새로운 일을 시작하고, 오늘 우리가 사이트를 크롤링을 계속하고 있으며,이 사이트 http://image.fengniao.com/
, 벌새 사진 다니엘 수집 장소,이 튜토리얼하시기 바랍니다 학습, 상업적 목적을 위해, 당연한 일로, 벌새는 웹 사이트에 저작권이 있습니다.
2. Fengniao 이미지 - 웹 분석
첫 번째 단계는, 페이지 매김을 찾고, 거기에 페이지를 열 수있는 방법을 크롤링 크롤링 웹 사이트를 분석하는
http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=1¬_in_id=5352384,5352410
http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=2¬_in_id=5352384,5352410
http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=3¬_in_id=5352384,5352410
http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=4¬_in_id=5352384,5352410
위의 페이지가 키 매개 변수를 찾기 위해 page=1
그가 마지막 페이지 번호를하지 않았다, 이것이 페이지 번호,하지만 다른 귀찮은 문제를, 그래서 우리는 사이클의 수를 결정하는 방법이 없기 때문에 뒤에 코드를 작성 만 사용할 수 있습니다 while
을
주소 데이터가 JSON 형식으로 반환되고,이 파충류, 매우 친절! 주 우리는 정규 표현식을 사용하여 분석 하였다.
안티 상승의 조치가있는 경우이 문서의 첫 페이지의 분석, 확인
그것은 그들이 가능성이 일에 대해 걱정하지 않는다 있습니다, 안티 상승 부족, 또한 호스트와 사용자 에이전트, 특별한 시점에, 대형 사이트는 고의적 인 것으로 나타났습니다.
두 번째 단계, 분석 이미지 세부 사항 페이지, 우리는 키 주소를 찾을 수, JSON의 정상에 도착
키 주소가 열 한 후,이 곳은 상대적으로 상 동작을 가지고 있으며, URL 선거 위의 그림은 잘못된 것으로 표시, 문서 될 일이, 그리고 우리가 원하는 것은 다시 새로운 링크를 제공하는 사진입니다 http://image.fengniao.com/slide/535/5352130_1.html#p=1
당신은 링크의 다음과 같은 무리를 발견, 법률로 직접 이동할 수 있지만,이 작업은 조금 복잡하다 페이지를 열고, 우리는이 페이지의 소스 코드에 액세스 할 수
http://image.fengniao.com/slide/535/5352130_1.html#p=1
http://image.fengniao.com/slide/535/5352130_1.html#p=2
http://image.fengniao.com/slide/535/5352130_1.html#p=3
....
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎
웹 페이지의 소스 코드를 발견, 그래서 지역
대담한 추측, 이것은 JSON의 사진이어야하지만 그는 HTML에 인쇄 된, 우리는 정규 표현식은 경기 후, 경기처럼 사용할 필요하고 다운로드합니다.
세 번째 단계는, 라인과 코드를 시작합니다.
3. 벌새 순 이미지 - 코드를 작성
from http_help import R # 这个文件自己去上篇博客找,或者去github找
import threading
import time
import json
import re
img_list = []
imgs_lock = threading.Lock() #图片操作锁
# 生产者类
class Product(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.__headers = {"Referer":"http://image.fengniao.com/",
"Host": "image.fengniao.com",
"X-Requested-With":"XMLHttpRequest"
}
#链接模板
self.__start = "http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page={}¬_in_id={}"
self.__res = R(headers=self.__headers)
def run(self):
# 因为不知道循环次数,所有采用while循环
index = 2 #起始页码设置为1
not_in = "5352384,5352410"
while True:
url = self.__start.format(index,not_in)
print("开始操作:{}".format(url))
index += 1
content = self.__res.get_content(url,charset="gbk")
if content is None:
print("数据可能已经没有了====")
continue
time.sleep(3) # 睡眠3秒
json_content = json.loads(content)
if json_content["status"] == 1:
for item in json_content["data"]:
title = item["title"]
child_url = item["url"] # 获取到链接之后
img_content = self.__res.get_content(child_url,charset="gbk")
pattern = re.compile('"pic_url_1920_b":"(.*?)"')
imgs_json = pattern.findall(img_content)
if len(imgs_json) > 0:
if imgs_lock.acquire():
img_list.append({"title":title,"urls":imgs_json}) # 这个地方,我用的是字典+列表的方式,主要是想后面生成文件夹用,你可以进行改造
imgs_lock.release()
위의 링크는 매우 간단합니다, 다음 사진을 다운로드, 생성 된
# 消费者
class Consumer(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.__res = R()
def run(self):
while True:
if len(img_list) <= 0:
continue # 进入下一次循环
if imgs_lock.acquire():
data = img_list[0]
del img_list[0] # 删除第一项
imgs_lock.release()
urls =[url.replace("\\","") for url in data["urls"]]
# 创建文件目录
for item_url in urls:
try:
file = self.__res.get_file(item_url)
# 记得在项目根目录先把fengniaos文件夹创建完毕
with open("./fengniaos/{}".format(str(time.time())+".jpg"), "wb+") as f:
f.write(file)
except Exception as e:
print(e)
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎
결과에서 코드 도보