日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

百度贴吧图片爬取,利用 pillow 将图片进行拼接形成照片墙

發布時間:2024/1/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 百度贴吧图片爬取,利用 pillow 将图片进行拼接形成照片墙 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python 爬取百度貼吧圖片,利用 Pillow 拼接圖片

1. 頁面分析
我們以百度貼吧為例,爬取一些圖片。

頁面比較簡單,信息提取只是關于圖片地址。在代碼中利用 lxml 和 Pyquery 兩種方法進行解析。

# 提取圖片的urldef dealText(self, url):photo_urls = []text = self.getText(url)# 1,利用lxml進行匹配html = etree.HTML(text)results = html.xpath('//img[@class="BDE_Image"]/@src')# 2利用Pyquery進行匹配# doc = pq(text)# for i in doc('.BDE_Image').items():# photo_urls.append(i.attr('src'))self.datas.extend(results)

2. 圖片保存及更新

將我們爬取的圖片 url 進行下載保存到本地

#根據圖片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('尺寸不錯,留下了')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')

由于我們要拼接圖片,所以對下載的圖片進行處理,保證尺寸大小一致。

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. 圖片拼接

對于上述更新后的圖片進行讀取,然后進行拼接。

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 # 當根文件下還有其他的文件夾時,只讀取根文件夾下的文件return images

根據自己意愿進行拼接,輸入每行每列幾張圖片。

def image_Stitching(self, images, horizontal_num, vertical_num):'''橫向縱向拼接:param images: 圖片地址:param horizontal_num: 行數:param vertical_num: 列數: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復制到target的指定位置中left += TARGET_WIDTH # left是左上角的橫坐標,依次遞增right += TARGET_WIDTH # right是右下的橫坐標,依次遞增quality_value = 100 # quality來指定生成圖片的質量,范圍是0~100target.save(self.photoWall_fpath + 'result' + str(horizontal_num) + str(vertical_num) + '.jpg',quality=quality_value)

結果如下:

詳細代碼:https://github.com/Acorn2/yeayee/blob/master/spider/tieba_meitu.py

總結

以上是生活随笔為你收集整理的百度贴吧图片爬取,利用 pillow 将图片进行拼接形成照片墙的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。