1. 程式人生 > >python3通過flickr id來爬取每個id下照片總數

python3通過flickr id來爬取每個id下照片總數

使用python3+requests+beautifulsoup4+openpyxl

因為在網上做了一個兼職,是他們給我flickr的ID,通過這些id來找需要的照片。有時候有的ID下照片太少,所以這有的ID不需要。寫這個小程式就是為了過濾掉照片數太少的。

1.首先通過openpyxl把資料讀取出來,儲存在一個列表中。
建立一個Excel類,裡面有讀取Excel資料的函式(readExcel)和把資料寫入Excel表中的函式(writeExcel)
程式碼:

'''
Created on 2017年9月3日

@author: liutao
'''
from openpyxl import
load_workbook from openpyxl import Workbook from openpyxl.writer.excel import ExcelWriter import os class excel(): def __init__(self, fil_address): self.file_address = fil_address #讀取Excel表資料 def readExcel(self): """在Excel中讀取資料 """ data = [] wb = load_workbook(self.file_address) sheet = wb.active for
i in range(1, sheet.max_row+1): data.append(sheet.cell(row=i, column=1).value) wb.close() return data #寫入Excel資料 def writeExcel(self, lists): """把資料寫入到excel中""" wb = Workbook() ws = wb.active #去除副檔名 file_name = os.path.splitext(str(self.file_address))[0
]+str('(1)')+str('.xlsx') print(file_name) print(lists) for i in range(0, len(lists)): ws.append(lists[i]) wb.save(file_name)

然後就是爬蟲,爬蟲是用第三方庫requests寫的,我覺得這個比自帶的urllib簡單多了,很方便。不過就是速度不怎麼快,或許是我用的ssr,網速太慢了吧。

爬蟲我還沒有采用類的方式來寫,因為後期還需要修改,現在只是邊寫邊測試。寫的不好,見諒~

爬蟲程式碼

'''
Created on 2017年9月3日

@author: liutao
'''
# /bin/bash

from Excel import excel
import requests
from bs4 import BeautifulSoup

file = "劉濤5.xlsx"
ex = excel(file)
ids = ex.readExcel()

#開始爬取網站使用者圖片總量
nums_data = []  #儲存對應的照片數量
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'
    ,'accept-language': 'zh-CN,zh;q=0.8'
    ,'accept-encoding': 'gzip, deflate, br'
    }

for i in range(0, len(ids)):
    url = r'https://www.flickr.com/photos/'+ids[i]
    print(str(i)+':'+url)
    try:
        r = requests.get(url, timeout=15, headers=headers)
    except requests.RequestException as e:
        print(e)
        #如果發生異常,設定照片數為0 
        nums_data.append([ids[i],0])
    except requests.ReadTimeout as t:
        print(t+'連線超時。。')
        nums_data.append([ids[i],0])
    else:    
        html = r.text
        #提取返回資料中的照片數
        soup = BeautifulSoup(html,"html.parser")
        tags = soup.find('p',attrs={'class':'metadata-item photo-count'})
        num = tags.string
        nums_data.append([ids[i],num])


ex.writeExcel(nums_data)

我實在windows環境下寫的,還沒在linux下去測試。windows下目錄不怎麼好使。

技術太渣了,還需努力啊

使用前:還沒用爬蟲之前

使用後,會生成一個新檔案,如之前有個檔案為 劉濤.xlsx 爬取之後會在同目錄生成一個 劉濤(1).xlsx
爬取資料之後

後期我想還會加入多執行緒(加速爬取速度),ip代理(防封ip)。看能不能用web的方式來提供這個服務。