python第一个项目:爬取一个网站的所有图片

目的:爬取一个网站的所有图片
调用库:requests库,BeautifulSoup库
程序设计:
1.函数getHTML():用于获取url的html文本
代码如下

def getHTML(url):
    try:
        r=requests.get(url,headers={'user-agent':'Mozilla/5.0'})
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        return r.text
    except:
        print('Fail')

该函数的注意事项是记得利用try except 的处理异常操作的方法来返回一个r.text
2.函数geturl():用于获得图片格式的url,在此处调用BeautifulSoup库
代码如下

def geturl(html,ulist):
    soup=BeautifulSoup(html,'html.parser')
    alist=soup.find_all('img')
    for i in range(len(alist)):
        ulist.append(alist[i].attrs['src'])
    print(ulist)

该段函数的注意事项是利用soup的find_all()方法来返回一个包含图片链接的所有标签列表,值得注意的是返回的这个列表的每个元素都是BF库解析过的html文件,所以不需要再次调用BF函数解析,我自己调了好久才发现》》》,最后将列表每个标签元素的attrs[’src‘]添加到ulist这个结果列表中
3.函数download(),再次利用requests库的get方法,以及os库来保存文件
代码如下

def download(url):
    root='D:/pics/'
    path=root+url.split("/")[-1]
    print(path)
    try:
        if not os.path.exists(root):    
            os.mkdir(root)
        if not os.path.exists(path):            
            r=requests.get(url)
            r.raise_for_status()
            with open(path,'wb') as k:
                k.write(r.content)
                k.close()
                print("文件保存成功")
        else:
            print("文件已存在")
    except:
        print("失败")

该段函数的注意事项是1.在这段函数中对程序进行了兼容性优化,那就是调用了os库来检查该电脑有没有root这个根目录,如果没有就利用os.mkdir()方法创建这个root目录,再将图片文件写入
4.最后使用一个主函数main()来调用以上三个函数来达到目的的实现
代码如下

def main():
    ulist=[]
    url=str(input('输入网址'))
    html=getHTML(url)
    geturl(html,ulist)
    for k in ulist:
        download(k)
        print('finish')

该段代码的注意事项是注意到用一个for循环来调用download函数从而写入所有图片文件,在这里我遇到一点小麻烦,一开始我是直接将for循环加到download函数中,但是运行就会一直报错,这里我还没有想通第一次方法为什么不可行

这个程序对于部分网址无法进行有效的爬取,这个坑可以以后学了更深的爬虫知识再来解决。

原文地址:https://www.cnblogs.com/yfc0818/p/11072698.html