现在是晚上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()