Python爬取图片练习

2017-11-26  本文已影响110人  十月石榴2013

项目遇到瓶颈,所以上周的学习笔记也没有写。周五周六花了两天,打算看一下python调节一下心情。
Python语言创始于1989年,是一门脚本语言,在数据处理方面很有优势。
Python是一个轻量级工具,安装很方便。Windows下安装见教程:
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001374738150500472fd5785c194ebea336061163a8a974000
linux自带python。
目前有python3和Python2两个版本,我使用的是python2.7,安装完之后,需要设置环境变量,或者干脆将C:\Python\python.exe复制到C:\Windows\System32,但这使得使用pip工具有点麻烦,需要进入C:\Python\Script\目录。
下面是一段从百度图片上爬取图片的练习代码,在某个目录中输入:python paqutupian.py [keyword] [number of picture] 就能在当前文件夹下爬取[number of picture]张[keyword]的图。
参考资料:
慕课网——北京理工大学python系列教程
voidsky_很有趣儿:http://www.jianshu.com/p/19c846daccb3
Cloudox_:http://blog.csdn.net/cloudox_/article/details/53465923
浮图糊涂:http://blog.csdn.net/qq_35028612/article/details/72810884
蓝闪:https://www.cnblogs.com/stan-si/archive/2017/03/02/6484146.html

# Download pictures from image.baidu
# referrance:
#   MOOC
#   http://www.jianshu.com/p/19c846daccb3
#   http://blog.csdn.net/cloudox_/article/details/53465923
#   http://blog.csdn.net/qq_35028612/article/details/72810884
#   https://www.cnblogs.com/stan-si/archive/2017/03/02/6484146.html

import requests     # 抓取网页的第三方库
import urllib       # 抓取网页的另一种库
import re           # 正则表达式的库
import os           # 操作系统调用的库
import string       # 字符串处理的库
from sys import argv # 获取命令行输入参数的库

# argv[0] 是函数文件的名字,此处就是paqutupian.py
keyword = argv[1]   # 获取第一个参数
NUMBER = int(argv[2])   # 获取第二个参数
root = os.getcwd()+'\\'+ keyword + '\\'  # 保存路径为当前目录+以关键词命名的文件夹
if not os.path.exists(root):
    os.mkdir(root)      # 创建文件夹
i = 0   # page i
num = 0
while num <= NUMBER:
    # 百度图片的网址的特点如下:Word = 关键词、pn = 20*页数;
    url = "http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word="+keyword+"&pn="+str(20*i)+"&gsm=64&ct=&ic=0&lm=-1&width=0&height=0"
    page = urllib.urlopen(url)
    html = page.read()
    # 以上这段的意思相当于右键网页,查看源代码
    reg = 'objURL":"(.*?)"'    # 模糊匹配,找objURL":" 与 " 中间的部分 
    imgre = re.compile(reg)    # 不知道在干嘛 
    imglist = re.findall(imgre, html)   
    for imgurl in imglist:
        num=num+1
        if num <= NUMBER:
            print imgurl
            try:
                pic= requests.get(imgurl, timeout=10)       # 访问图片的地址
            except : #requests.exceptions.ConnectionError:
                print '[EEROR] can not download the picture...'
                continue
            # 以下部分为把图片保存在文件夹中
            name = str(num) + ".jpg" 
            string = root + name
            if not os.path.exists(string):
                fp = open(string,'wb')
                fp.write(pic.content)   # pic.content 指pic这网页的二进制形式
                fp.close()
        else :
            break
    i = i+1  
上一篇下一篇

猜你喜欢

热点阅读