>  기사  >  백엔드 개발  >  Python을 사용하여 5분 안에 자동 이미지 다운로더 만들기

Python을 사용하여 5분 안에 자동 이미지 다운로더 만들기

怪我咯
怪我咯원래의
2017-06-23 14:26:191478검색


파이썬 크롤러 연습 - 자동 이미지 다운로더

크롤러를 만드는 기본 단계

그런데, 이 작은 예제를 통해 크롤러를 만드는 몇 가지 기본 단계를 익힐 수 있습니다.

일반적으로 크롤러를 만들려면 다음 단계가 필요합니다.

  1. 요구 사항 분석(예, 요구 사항 분석은 매우 중요합니다. 선생님이 가르쳐주지 않았다고 말하지 마세요.)

  2. 웹 페이지 소스 분석 F12로 코딩하고 협력하세요 (F12만큼 지저분한 웹페이지 소스코드도 없습니다. 죽는 걸 보고 싶나요?)

  3. 정규식 또는 XPath 표현식 작성(앞에서 언급한 아티팩트)

  4. 공식적으로 작성 python 크롤러 코드

효과

실행:

자, 키워드를 입력하겠습니다. 생각해 보겠습니다. 무엇을 입력해야 할까요? 노출이 좀 있는 것 같더라구요.

Enter를 누르세요

다운로드가 시작된 것 같아요! 엄청난! , 다운로드한 사진을 보니 와, 순간 이모티콘을 더 많이 추가한 것 같은 느낌이 들었습니다....

그래, 거의 다 됐네요.

요구사항 분석

"사진을 원하지만 온라인에서 검색하고 싶지는 않습니다"
"자동으로 다운로드하는 것이 가장 좋습니다"
...

이것이 수요입니다. 좋아요, 수요 분석을 시작하고 구현해 보겠습니다. 적어도 두 가지 기능, 하나는 사진을 검색하는 것이고 다른 하나는 자동으로 다운로드하는 것입니다.

우선 사진을 검색할 때 가장 생각하기 쉬운 것은 바이두 사진을 크롤링한 결과다. 자, 바이두 사진에 가서 살펴보자.

기본적으로는 이렇다. 아름다운.

무언가를 검색하려고 하는데 단어를 입력하면 일련의 검색결과가 나옵니다. 이게 무슨 뜻인가요...

Enter 키만 찾으세요

알겠습니다. 사진이 너무 많아서 여기에 있는 사진을 모두 크롤링할 수 있으면 좋을 것 같아요. 홈페이지에 키워드 정보가 있는 걸 봤는데

홈페이지에서 직접 키워드를 바꿔보려고 했는데 튀었나요?

이렇게 하면 이 URL을 통해 특정 키워드의 사진을 검색할 수 있기 때문에 이론적으로는 웹 페이지를 열지 않고도 특정 사진을 검색할 수 있습니다. 다음 질문은 자동 다운로드를 구현하는 방법입니다. 실제로 이전 지식을 사용하여 요청을 사용하여 이미지의 URL을 가져온 다음 이를 크롤링하여 .jpg로 저장할 수 있다는 것을 알고 있습니다.

그래서 이 프로젝트는 완료되어야 합니다.

웹페이지 분석

자, 다음 단계부터 웹페이지 소스 코드를 분석해 보겠습니다. 여기서 먼저 기존 페이지로 다시 전환합니다. Baidu 사진은 현재 폭포 흐름 모드를 사용하기 때문에 처리하기가 매우 번거롭습니다.

또 다른 팁이 있습니다. 모바일 버전을 크롤링할 수 있다면 컴퓨터 버전을 크롤링하지 마세요. 모바일 버전의 코드가 매우 명확하고 필요한 콘텐츠를 쉽게 얻을 수 있기 때문입니다.

알겠습니다. 기존 버전으로 다시 전환했지만 여전히 페이지 번호가 있고 읽기 편합니다.

우클릭해서 소스코드를 보시죠

이게 뭐야, 어떻게 선명하게 보이죠! !

이번에는 개발자 도구인 F12를 사용할 차례입니다! 이전 페이지로 돌아가서 F12 키를 누르면 아래 도구 모음이 나옵니다. 우리가 사용해야 할 것은 왼쪽 상단에 있는 것 중 하나는 마우스 따라가기이고, 다른 하나는 모바일 버전 전환입니다. 우리에게 매우 유용합니다. 여기서는 첫 번째 것을 사용합니다


然后选择你想看源代码的地方,就可以发现,下面的代码区自动定位到了这个位置,是不是很NB!

我们复制这个地址

然后到刚才的乱七八糟的源代码里搜索一下,发现它的位置了!(小样!我还找不到你!)但是这里我们又疑惑了,这个图片怎么有这么多地址,到底用哪个呢?我们可以看到有thumbURL,middleURL,hoverURL,objURL

通过分析可以知道,前面两个是缩小的版本,hover是鼠标移动过后显示的版本,objURL应该是我们需要的,不信可以打开这几个网址看看,发现obj那个最大最清晰。

好了,找到了图片位置,我们就开始分析它的代码。我看看是不是所有的objURL全是图片

貌似都是以.jpg格式结尾的,那应该跑不了了,我们可以看到搜索出61条,说明应该有61个图片

编写正则表达式

通过前面的学习,写出如下的一条正则表达式不难把?

pic_url = re.findall('"objURL":"(.*?)",',html,re.S)

编写爬虫代码

好了,正式开始编写爬虫代码了。这里我们就用了2个包,一个是正则,一个是requests包,之前也介绍过了,没看的回去看!

#-*- coding:utf-8 -*-import reimport requests

然后我们把刚才的网址粘过来,传入requests,然后把正则表达式写好

url = 'http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1460997499750_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E5%B0%8F%E9%BB%84%E4%BA%BA'



html = requests.get(url).text
pic_url = re.findall('"objURL":"(.*?)",',html,re.S)

理论有很多图片,所以要循环,我们打印出结果来看看,然后用request获取网址,这里由于有些图片可能存在网址打不开的情况,加个5秒超时控制。

pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
i = 0for each in pic_url:print eachtry:
        pic= requests.get(each, timeout=10)except requests.exceptions.ConnectionError:print '【错误】当前图片无法下载'continue

好了,再就是把网址保存下来,我们在事先在当前目录建立一个picture目录,把图片都放进去,命名的时候,用数字命名把

    string = 'pictures\\'+str(i) + '.jpg'
    fp = open(string,'wb')
    fp.write(pic.content)
    fp.close()
    i += 1

整个代码就是这样:

#-*- coding:utf-8 -*-
import re
import requests

url = 'http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1460997499750_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E5%B0%8F%E9%BB%84%E4%BA%BA'html = requests.get(url).text
pic_url = re.findall('"objURL":"(.*?)",',html,re.S)i = 0for each in pic_url:
    print each
    try:
        pic= requests.get(each, timeout=10)
    except requests.exceptions.ConnectionError:
        print '【错误】当前图片无法下载'
        continue
    string = 'pictures\\'+str(i) + '.jpg'
    fp = open(string,'wb')
    fp.write(pic.content)
    fp.close()i += 1

我们运行一下,看效果(什么你说这是什么IDE感觉很炫!?赶紧去装Pycharm,Pycharm的配置和使用看这个文章!)!

好了我们下载了58个图片,咦刚才不是应该是61个吗?


我们看,运行中出现了有一些图片下载不了


我们还看到有图片没显示出来,打开网址看,发现确实没了。

所以,百度有些图片它缓存到了自己的机器上,所以你还能看见,但是实际连接已经失效

好了,现在自动下载问题解决了,那根据关键词搜索图片呢?只要改url就行了,我这里把代码写下来了

    word = raw_input("Input key word: ")
    url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word='+word+'&ct=201326592&v=flip'result = requests.get(url)

好了,享受你第一个图片下载爬虫吧!!当然不只能下载百度的图片拉,依葫芦画瓢,你现在应该做很多事情了,比如爬取头像,爬淘宝展示图,或是...美女图片,捂脸。一切都凭客官你的想象了,当然,作为爬虫的第一个实例,虽然纯用request已经能解决很多问题了,但是效率还是不够高,如果想要高效爬取大量数据,还是用scrapy吧

위 내용은 Python을 사용하여 5분 안에 자동 이미지 다운로더 만들기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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