beautifulsoup的find_all用法,爬取斗图网图片

弄不清楚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()

你可能感兴趣的:(beautifulsoup的find_all用法,爬取斗图网图片)