弄不清楚findAll和find_all的区别。
几点收获
- 使用 find_all取获取目标链接
- 使用urllib库下载图片,貌似更简便
- 获取图片链接地址时要注意,后面一个图片往往是未加载完成时显示的“正在加载”的图片,要注意区分
- 爬回的链接中有个把不符合条件,截取链接最后几个字符 用 in 判断是否是jpg或gif,不是就直接pass
- 其他方面没有难度
- 下次多选取页码范围,下载图片的时候可以用多线程。
import requests
from urllib import request
from bs4 import BeautifulSoup
#构建目标网站链接
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')
#以下为最关键一句
srcs=soup.find_all('img',attrs={'class':'img-responsive lazy image_dta'})
for i in srcs:
src.append(i['data-original']) #返回数组,想用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()