爬取完文字,今天就來(lái)爬起圖片練練手吧,這是練手的網(wǎng)站 居然搞笑網(wǎng)
咦,還有意外驚喜,發(fā)現(xiàn)里面的動(dòng)態(tài)圖片不但搞笑,還很養(yǎng)眼~~
好吧,爬一下試試吧
- 由于代碼比較簡(jiǎn)單,只有十幾行,就先上代碼吧
import requests
from lxml import etree
import time
def get_img(url):
r = requests.get(url,headers=headers)
r.encoding = r.apparent_encoding
html = etree.HTML(r.text)
list = html.xpath("http://div[@class='item']/div[@class='text']/p/img/@src")
for img in list:
img = str(img)
img_name = img.split('/')[-1]
pic = requests.get(img,headers=headers)
with open('D:\\pics\\pic_gif\\'+img_name,'wb') as f:
print('正在下載:',img_name)
f.write(pic.content)
if __name__ == '__main__':
urls = ['https://www.zbjuran.com/dongtai/list_4_{}.html'.format(str(i)) for i in range(1,2475)]
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
}
for url in urls:
get_img(url)
time.sleep(0.5)
- 代碼解釋
import requests
from lxml import etree
import time
首先導(dǎo)入需要用到的庫(kù),其中time模塊用來(lái)是延長(zhǎng)爬蟲爬取間隔,防止被封
def get_img(url):
r = requests.get(url,headers=headers)
r.encoding = r.apparent_encoding
html = etree.HTML(r.text)
list = html.xpath("http://div[@class='item']/div[@class='text']/p/img/@src")
定義一個(gè)獲取圖片的函數(shù),用xpath解析requests返回的網(wǎng)頁(yè),其中返回來(lái)的list是一個(gè)盛放多個(gè)圖片url的列表
for img in list:
img = str(img)
img_name = img.split('/')[-1]
pic = requests.get(img,headers=headers)
with open('D:\\pics\\pic_gif\\'+img_name,'wb') as f:
print('正在下載:',img_name)
f.write(pic.content)
從列表中遍歷url,并用spilt()函數(shù)獲取url斜杠最后一部分為圖片的名字
然后用open()函數(shù)加載圖片
if __name__ == '__main__':
urls = ['https://www.zbjuran.com/dongtai/list_4_{}.html'.format(str(i)) for i in range(1,2475)]
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
}
for url in urls:
get_img(url)
time.sleep(0.5)
主程序入口,利用for循環(huán)構(gòu)造多頁(yè)url列表,再用for循環(huán)遍歷出來(lái)放入get_img()函數(shù)獲取多頁(yè)圖片,time.sleep()睡眠0.5秒

1541257121(1).png
不知道今天網(wǎng)絡(luò)原因還是寫的代碼有問(wèn)題,圖片下的特別慢,看來(lái)要學(xué)習(xí)一下怎么使用多線程了~