百度贴吧图片爬取,利用 pillow 将图片进行拼接形成照片墙
生活随笔
收集整理的這篇文章主要介紹了
百度贴吧图片爬取,利用 pillow 将图片进行拼接形成照片墙
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
python 爬取百度貼吧圖片,利用 Pillow 拼接圖片
1. 頁面分析
我們以百度貼吧為例,爬取一些圖片。
頁面比較簡(jiǎn)單,信息提取只是關(guān)于圖片地址。在代碼中利用 lxml 和 Pyquery 兩種方法進(jìn)行解析。
2. 圖片保存及更新
將我們爬取的圖片 url 進(jìn)行下載保存到本地
#根據(jù)圖片url下載圖片def saveImg(self, url):if not os.path.exists(self.fpath):os.mkdir(self.fpath)try:response = requests.get(url)if 200 == response.status_code:file_path = '{0}{1}.{2}'.format(self.fpath, md5(response.content).hexdigest(), 'jpg')if not os.path.exists(file_path):if self.img_size(response.content)[0] > 400 and self.img_size(response.content)[1] > 600: # 圖片寬*高大于400*600像素才保存print('尺寸不錯(cuò),留下了')with open(file_path, 'wb') as fw:fw.write(response.content)else:print('Already Download', file_path)except requests.ConnectionError:print('Failed to Save Image')由于我們要拼接圖片,所以對(duì)下載的圖片進(jìn)行處理,保證尺寸大小一致。
def ResizeImage(self):'''圖片尺寸大小修改:param filein: 圖片打開路徑:param fileout: 圖片保存路徑:param width: 圖片修改的寬度:param height: 圖片修改的高度:return: 木有返回值'''images = self.get_Images()if not os.path.exists(self.new_fpath):os.mkdir(self.new_fpath)for i in range(len(images)):filein = self.fpath + images[i]fileout = self.new_fpath + str(i) + '.jpg'img = Image.open(filein)out = img.resize((TARGET_WIDTH, UNIT_SIZE), Image.ANTIALIAS) # resize image with high-qualityout.save(fileout)3. 圖片拼接
對(duì)于上述更新后的圖片進(jìn)行讀取,然后進(jìn)行拼接。
def get_Images(self):'''獲取某文件夾下所有的文件名稱:param fpath: 圖片文件路徑:return images: 圖片文件名'''images = []for root, dirs, files in os.walk(self.new_fpath): # 遍歷文件夾下的所有文件,根文件夾下還有子文件夾,則自上而下遍歷for f in files:images.append(f)break # 當(dāng)根文件下還有其他的文件夾時(shí),只讀取根文件夾下的文件return images根據(jù)自己意愿進(jìn)行拼接,輸入每行每列幾張圖片。
def image_Stitching(self, images, horizontal_num, vertical_num):'''橫向縱向拼接:param images: 圖片地址:param horizontal_num: 行數(shù):param vertical_num: 列數(shù):return: 木有返回值'''target = Image.new('RGB', (TARGET_WIDTH * horizontal_num, UNIT_SIZE * vertical_num))for i in range(vertical_num):imagefile = []for j in range(horizontal_num):img = Image.open(self.new_fpath + images[i * horizontal_num + j])imagefile.append(img)left = 0right = TARGET_WIDTHfor image in imagefile:target.paste(image, (left, UNIT_SIZE * i, right, UNIT_SIZE * (i + 1))) # 將image復(fù)制到target的指定位置中l(wèi)eft += TARGET_WIDTH # left是左上角的橫坐標(biāo),依次遞增right += TARGET_WIDTH # right是右下的橫坐標(biāo),依次遞增quality_value = 100 # quality來指定生成圖片的質(zhì)量,范圍是0~100target.save(self.photoWall_fpath + 'result' + str(horizontal_num) + str(vertical_num) + '.jpg',quality=quality_value)結(jié)果如下:
詳細(xì)代碼:https://github.com/Acorn2/yeayee/blob/master/spider/tieba_meitu.py
總結(jié)
以上是生活随笔為你收集整理的百度贴吧图片爬取,利用 pillow 将图片进行拼接形成照片墙的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件篇 Via浏览器 – 简洁优雅的手
- 下一篇: 支付宝营销策略效果分析(AB测试原理与流