花瓣网爬取美女图片 每次20张

现在是晚上11点40了,今天是第一天学习爬虫知识,初学者,只是很大概的接触Python的语法,所以今天一下午加晚上学的挺累的。
遇到第一个问题就是Python脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level
然后一直找原因 卡在这里好几个小时 最后发现平常我的个人习惯是换行后敲三个空格 然后Sublime的换行习惯是Tab键 无意中发现的 这个可能是自己摸索学习最大的困难了吧,对于明白人一瞬间的事情,我们需要好久好久。
第二个就是看了下if name == “main“:的用法就是 作为一个模块使用的时候 不引用这个语句块
第三个就是多线程 threading的使用:myThread(threading.Thread)
最后就是JSON的loads和dumps的使用:一个是把字符串转换为字典,一个是把字典转换为字符串。

#/usr/bin/env python
#coding:utf-8

import json
import urllib.request
import threading
#导入需要的JSON ,urllib及threading
#定义一个类
class myThread(threading.Thread):
    def __init__(self,imgurl,filename):
        threading.Thread.__init__(self)
        self.imgurl = imgurl
        self.filename = filename
    def run(self):
        print ('downloading: ' + self.imgurl)
        downfile(self.imgurl,self.filename)
#定义一个下载程序
def downfile(imgurl , filename):
    img_req = urllib.request.Request(imgurl)
    opener = urllib.request.build_opener()
    img_resp = opener.open(img_req)
    try:
        out = open(filename,'wb')
        out.write(img_resp.read())
        out.flush()
        out.close()
    except:
        print('error')

if __name__ == "__main__":

    surl = 'http://huaban.com/pins/1821121555/?jlb0k0ki'
    #需要爬取的花瓣网美女图片地址
    hb = urllib.request.Request(surl)
    #按XHLHttprequest方式请求
    hb.add_header('X-Requested-With','XMLHttpRequest' )
    #模拟win10 chrome 浏览器
    hb.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0')
    html = urllib.request.urlopen(hb).read()
    obj = json.loads( html )
    #print (obj['pin']['board']['pins'])
    imgs = obj['pin']['board']['pins']
    #花瓣网图片需要的网址头
    preurl = 'http://img.hb.aicdn.com/'
    for img in imgs :

        imgurl = preurl + img['file']['key']
        #print (imgurl)
        myThread(imgurl,img['file']['key'] + '.jpg').start()

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值