有圖有真相
image.png
要實(shí)現(xiàn)的目標(biāo)
要想在斗圖中立于不敗之地木人,必須要有充足的表情包可用。想來撕逼的隨時(shí)奉陪冀偶。也不用太多醒第,就爬個(gè)網(wǎng)站的圖來用用好了。也不能太欺負(fù)人是不进鸠。
如何做
有了目標(biāo)之后稠曼,接下來就是有預(yù)謀的實(shí)施了。
用到的技術(shù)棧:Python BeautifulSoup etree
先說一下思路:無非就是遍歷每個(gè)頁面客年,把每個(gè)頁面的圖片地址提取出來霞幅,并按圖片分組保存的本地文件夾中。
目標(biāo)網(wǎng)站:https://www.doutula.com
先把依賴的包引用進(jìn)來
#_*_ coding: utf-8 _*_
import requests
import threading
from bs4 import BeautifulSoup
from lxml import etree #解析網(wǎng)頁
import os #文件操作
定義個(gè)獲取HTML的函數(shù)量瓜,設(shè)置請(qǐng)求頭
def getHtml(url):
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3107.4 Safari/537.36'}
req = requests.get(url = url, headers = header)
res = req.text
return res
分析下網(wǎng)頁結(jié)構(gòu)
頁面地址是這樣的:https://www.doutula.com/article/list/?page=2
每頁有N個(gè)分組(懶得數(shù))司恳,每個(gè)分組有一個(gè)鏈接,這個(gè)是分組的詳情頁绍傲,頁就是套圖的內(nèi)容扔傅。
image.png
那我們就這樣來操作,把每個(gè)套圖的鏈接和標(biāo)題存到一個(gè)list中烫饼,然后循環(huán)這個(gè)list猎塞,去抓取每頁的表情。
def getGroupList(html):
soup = BeautifulSoup(html, 'lxml') #實(shí)例化soup
allImg = soup.find_all('a', class_='list-group-item') #獲取所有圖片鏈接
groupList = [] #套圖列表
for link in allImg:
img_html = getHtml(link['href']) #獲取每個(gè)套圖詳情的源碼
imgGroup_title = link.find_all('div', class_='random_title')[0].contents[0]
imgGroup = {'title': imgGroup_title, 'html': img_html}
groupList.append(imgGroup)
return groupList
剩下的就是保存圖片了
def saveImg(imgUrl, imgTitle, groupTitle):
#print imgTitle[0]
#print imgTitle[0].encode('utf-8')
#imgUrl = imgUrl.split('=')[-1][1:-2].replace('jp','jpg') #提取url
if imgUrl[0:2] == '//':
imgUrl = 'http:' + imgUrl
print('正在下載' + imgUrl)
imgContent = requests.get( imgUrl).content
fileName = 'H:\doutu2\\' + groupTitle + '\\' + imgTitle[0] + '.jpg'
with open(unicode(fileName), 'wb') as f:
f.write(imgContent)
總結(jié)
嚴(yán)重吐槽一下Python的多線程杠纵,真是夠雞肋的荠耽,這種IO密集型的操作都把我的CPU給干滿了。還有如果對(duì)Web開發(fā)比較了解的話比藻,寫爬蟲是很簡(jiǎn)單的骇塘,因?yàn)樾枰獙?duì)HTML結(jié)構(gòu)有深入的了解。
源碼地址:https://github.com/fuyunzhishang/doutuSpider