现在是晚上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-8import json
import urllib.request
import threading
#导入需要的JSON ,urllib及threading
#定义一个类
class myThread(threading.Thread):def __init__(self,imgurl,filename):threading.Thread.__init__(self)self.imgurl = imgurlself.filename = filenamedef 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()