網(wǎng)址:https://www.doutula.com/photo/list/?page=1
這是一個寫的很規(guī)范的網(wǎng)站簿姨,就是意味著很好爬。哈哈哈。首先分析網(wǎng)頁元素扁位,在瀏覽器中打開開發(fā)者工具檢查元素准潭。點擊network,我使用的是火狐瀏覽器域仇,所以點擊網(wǎng)絡(luò)就行刑然,然后網(wǎng)頁刷新。這里為了過濾掉其他沒用的文件殉簸,選擇圖像闰集。可以看到有很多的圖像鏈接般卑,我要的就是這些文件武鲁。如圖:
然后隨便選擇一個文件點擊進(jìn)去,這里是可以預(yù)覽的蝠检,可以看到它的各種信息沐鼠,如圖:
下面開始寫代碼:
首先導(dǎo)包:
import requests
import os
import re
這次是使用正則表達(dá)式來解析網(wǎng)頁
因為我想爬取的不是僅僅一張網(wǎng)頁上的圖片,所以這里我是使用一個循環(huán)叹谁,也可以不使用饲梭,直接拿出來即可
url = 'https://www.doutula.com/photo/list/?page=1'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/63.0'
}
response = requests.get(url,headers = headers).text
print(response)
這里要注意的一點是火狐的User-Agent竟然無法使用!Q骈荨c旧妗!N錾弧6颠丁!所以需要換成其他瀏覽器的衩侥。會報錯的国旷。。茫死。
可以打印網(wǎng)頁內(nèi)容先看一下
然后就開始正則匹配圖片鏈接
reg = r'data-original="(.*?)"'
images_urls = re.findall(reg,respose)
#print(images_urls)
def download(url1):
res = requests.get(url1,headers = header).content
return res
for images_url in images_urls:
image_name = images_url.split('/')[-1][:-4]
print(image_name)
image = download(images_url)
with open('./images/%s'%image_name,'wb')as file:
file.write(image)
print("the"+str(n)+'page has completed copying')
這里也是開頭的for循環(huán)里的內(nèi)容跪但,使用切片來正確打印圖片的名字,提前在當(dāng)前目錄建立images文件夾
完整代碼很短峦萎,如下:
# !/usr/bin/env python
# -*- coding:utf-8 -*-
#author named sunxth
#IDE pycharm
import requests
import re
import os
def mainpy():
for n in range(1,30):
url = "https://www.doutula.com/photo/list/?page="+str(n)
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.204 Safari/537.36'}
respose = requests.get(url,headers = header).text
#print(respose)
reg = r'data-original="(.*?)"'
images_urls = re.findall(reg,respose)
#print(images_urls)
def download(url1):
res = requests.get(url1,headers = header).content
return res
for images_url in images_urls:
image_name = images_url.split('/')[-1][:-4]
print(image_name)
image = download(images_url)
with open('./images/%s'%image_name,'wb')as file:
file.write(image)
print("the"+str(n)+'page has completed copying')
if __name__ == '__main__':
mainpy()
使用效果如下: