弄不清楚findAll和find_all的區(qū)別。
幾點收獲
- 使用 find_all取獲取目標(biāo)鏈接
- 使用urllib庫下載圖片锅知,貌似更簡便
- 獲取圖片鏈接地址時要注意播急,后面一個圖片往往是未加載完成時顯示的“正在加載”的圖片脓钾,要注意區(qū)分
- 爬回的鏈接中有個把不符合條件售睹,截取鏈接最后幾個字符 用 in 判斷是否是jpg或gif,不是就直接pass
- 其他方面沒有難度
- 下次多選取頁碼范圍可训,下載圖片的時候可以用多線程昌妹。
import requests
from urllib import request
from bs4 import BeautifulSoup
#構(gòu)建目標(biāo)網(wǎng)站鏈接
urls=["http://www.doutula.com/photo/list/?page={}".format(str(i)) for i in range(1,3)]
def get_srcs(url): #獲取圖片鏈接
src=[]
html=requests.get(url)
soup=BeautifulSoup(html.text,'lxml')
#以下為最關(guān)鍵一句
srcs=soup.find_all('img',attrs={'class':'img-responsive lazy image_dta'})
for i in srcs:
src.append(i['data-original']) #返回數(shù)組捶枢,想用yield,但是沒弄明白飞崖。
return src
def down_pic(src): #下載圖片
root='d:/py/spider/doutuphoto/'
if src[-3:] in ['jpg','gif']:
request.urlretrieve(src,filename=root+src.split('/')[-1])
else:
pass
def main():
for url in urls:
for i in get_srcs(url): #此處可加多線程
down_pic(i)
print (i)
if __name__=='__main__':
main()