파이썬 파충류 [6] 시작하기 : 벌새 네트워크가 하나 개의 사진을 크롤링

1. 벌새 순 이미지 - 소개

건국 기념일 휴일이 끝난, 새로운 일을 시작하고, 오늘 우리가 사이트를 크롤링을 계속하고 있으며,이 사이트 http://image.fengniao.com/, 벌새 사진 다니엘 수집 장소,이 튜토리얼하시기 바랍니다 학습, 상업적 목적을 위해, 당연한 일로, 벌새는 웹 사이트에 저작권이 있습니다.

파이썬 파충류 [6] 시작하기 : 벌새 네트워크가 하나 개의 사진을 크롤링

2. Fengniao 이미지 - 웹 분석

첫 번째 단계는, 페이지 매김을 찾고, 거기에 페이지를 열 수있는 방법을 크롤링 크롤링 웹 사이트를 분석하는

http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=1&not_in_id=5352384,5352410
http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=2&not_in_id=5352384,5352410
http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=3&not_in_id=5352384,5352410
http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=4&not_in_id=5352384,5352410

위의 페이지가 키 매개 변수를 찾기 위해 page=1그가 마지막 페이지 번호를하지 않았다, 이것이 페이지 번호,하지만 다른 귀찮은 문제를, 그래서 우리는 사이클의 수를 결정하는 방법이 없기 때문에 뒤에 코드를 작성 만 사용할 수 있습니다 while

주소 데이터가 JSON 형식으로 반환되고,이 파충류, 매우 친절! 주 우리는 정규 표현식을 사용하여 분석 하였다.

파이썬 파충류 [6] 시작하기 : 벌새 네트워크가 하나 개의 사진을 크롤링

안티 상승의 조치가있는 경우이 문서의 첫 페이지의 분석, 확인

파이썬 파충류 [6] 시작하기 : 벌새 네트워크가 하나 개의 사진을 크롤링

그것은 그들이 가능성이 일에 대해 걱정하지 않는다 있습니다, 안티 상승 부족, 또한 호스트와 사용자 에이전트, 특별한 시점에, 대형 사이트는 고의적 인 것으로 나타났습니다.

두 번째 단계, 분석 이미지 세부 사항 페이지, 우리는 키 주소를 찾을 수, JSON의 정상에 도착

파이썬 파충류 [6] 시작하기 : 벌새 네트워크가 하나 개의 사진을 크롤링

키 주소가 열 한 후,이 곳은 상대적으로 상 동작을 가지고 있으며, 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学习者的聚集地,零基础,进阶,都欢迎

웹 페이지의 소스 코드를 발견, 그래서 지역

파이썬 파충류 [6] 시작하기 : 벌새 네트워크가 하나 개의 사진을 크롤링

대담한 추측, 이것은 JSON의 사진이어야하지만 그는 HTML에 인쇄 된, 우리는 정규 표현식은 경기 후, 경기처럼 사용할 필요하고 다운로드합니다.

세 번째 단계는, 라인과 코드를 시작합니다.

파이썬 파충류 [6] 시작하기 : 벌새 네트워크가 하나 개의 사진을 크롤링

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={}&not_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学习者的聚集地,零基础,进阶,都欢迎

결과에서 코드 도보

파이썬 파충류 [6] 시작하기 : 벌새 네트워크가 하나 개의 사진을 크롤링

추천

출처blog.51cto.com/14445003/2423289