import requests from bs4 import BeautifulSoup import os #导入os模块 class TuKuSpider(): """docstring for TuKuSpider""" def __init__(self): self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'} self.url='http://588ku.com/tuku/jiepai.html' self.folder_path='E:\TuKuImg' def get_img_url(self): print('开始请求页面') init_response = self.request(self.url) all_img = BeautifulSoup(init_response.text,'lxml').find_all('img',class_='lazy') print('开始建立文件夹') self.mkdir(self.folder_path) #建立文件夹 print('开始切换文件夹') os.chdir(self.folder_path) #切换路径至上面建立的文件夹 for each in all_img: img_url = each.get('data-original') img_name = each.get('alt') if img_name == None: img_name = 'NoName' if img_url[-3:]=='png': img_url_final = 'http:'+img_url img_response = self.request(img_url_final) self.save_png(img_url_final,img_name) else: img_url = img_url[:img_url.index('.jpg')+4] img_url_final = 'http:'+img_url img_response = self.request(img_url_final) self.save_jpg(img_url_final,img_name) def request(self,url): r=requests.get(url,headers=self.headers) return r def save_jpg(self, url, name): ##保存图片 print('开始请求图片地址,过程会有点长...') img = self.request(url) file_name = name + '.jpg' print('开始保存图片') f = open(file_name, 'ab') f.write(img.content) print(file_name,'图片保存成功!') f.close() def save_png(self, url, name): ##保存图片 print('开始请求图片地址,过程会有点长...') img = self.request(url) file_name = name + '.png' print('开始保存图片') f = open(file_name, 'ab') f.write(img.content) print(file_name,'图片保存成功!') f.close() def mkdir(self, path): ##这个函数建立文件夹 path = path.strip() isExists = os.path.exists(path) if not isExists: print('建立名字叫作', path, '的文件夹') os.makedirs(path) print('建立成功!') else: print(path, '文件夹已经存在了,再也不建立') a = TuKuSpider() a.get_img_url()
这个是针对千图网里面,搜索“街拍”弹出的结果进行一个爬虫编写。纯粹是为了练习,只爬15张图没什么必要写爬虫,手动都下载完了。html
下面写一下这个爬虫的一些关键点:python
1、图片URL所在位置:包含在属性class是lazy的IMG标签内,data-original内。ide
2、图片的URL须要进行文本处理,有些须要,有些不须要,要写个if判断。函数
3、图片保存的时候,在命名时要注意,后缀除了JPG之外,还有PNG,个人处理是加多了一个保存PNG的类。url
踩的一些坑:spa
1、逻辑主体里面,有时在sublime text复制来复制去的时候,前面没有了空格,python会报错,只有前面是实线时,才是正确的,圆点是会报错的。code
2、URL必须带“http://”否则requests没法识别,或者文本处理后的URL有误,都会报错:requests.exceptions.MissingSchema: Invalid URLxml