• 【python小练】图片爬虫之BeautifulSoup4


    Python3用不了Scrapy!

    Python3用不了Scrapy!

    Python3用不了Scrapy!

    [重要的事情说三遍,据说大神们还在尝试把scrapy移植到python3,特么浪费我半个小时pip scrapy = - =]

    【更新:py3现在可以用scrapy了,感谢大神们=w=】

    先前用正则表达式匹配出符合要求的<img>标签真的超麻烦的,正则式错一点点都要完蛋,用bs4感觉方便很多。

    bs4是将整个html拆解成字典和数组,所以处理起来比较简单。

    以这个页面为例(毕竟堆糖本命):http://www.duitang.com/search/?kw=%E6%96%87%E8%B1%AA%E9%87%8E%E7%8A%AC&type=feed#!s-p1

    要下载我想要的图片,最终目标是图片的url数据。

    先看页面源码:

    1. 读取页面代码:

    html_doc = urllib.request.urlopen(url + "#!s-p" + str(n+x-1)).read().decode('utf-8')
    soup = BeautifulSoup(html_doc, "lxml")

    2. 见上图,我想下载的图片都包含在符合【属于class="a"的<a>标签】这个特点的<a>标签下,用bs4找出这些<a>标签,用下面这句代码:

    soup.find_all('a', class_='a')
    #soup.find_all('(标签名)',(符合属性))

    3. 从中找出图片<img>标签,并获取链接地址url到img_src:

    for myimg in soup.find_all('a', class_='a'):
         img_src = myimg.find('img').get('src')

    从第二步来看确实是比纯粹用正则表达式省时省力。

    完整代码如下,其实也只改了正则那一小部分:

    from bs4 import BeautifulSoup
    import urllib.request
    import os
    
    def downlaodimg(url,m,n):
    
        os.chdir(os.path.join(os.getcwd(), 'photos'))
        t = 1  # 记录图片张数
    
        for x in range(n-m+1):
            html_doc = urllib.request.urlopen(url + "#!s-p" + str(n+x-1)).read().decode('utf-8')
            soup = BeautifulSoup(html_doc, "lxml")
    
            for myimg in soup.find_all('a', class_='a'):
                pic_name = str(t) + '.jpg'
                img_src = myimg.find('img').get('src')
                urllib.request.urlretrieve(img_src, pic_name)
                print("Success!" + img_src)
                t += 1
            print("Next page!")
    
    downlaodimg("http://www.duitang.com/search/?kw=%E6%96%87%E8%B1%AA%E9%87%8E%E7%8A%AC&type=feed",1,3)

    和前一篇一样添加了起始页和终止页两个参数。

    下载后文件夹:

    ps:太宰桑真是太萌辣(●'◡'●)ノ♥不说了再去看一遍~

  • 相关阅读:
    02-02:springboot 整合filter
    02-01:springboot整合servlet开发
    01-SpringBoot项目:helloworld
    SpringBoot
    JavaScript面试题
    vue的生命周期
    小程序下的兼容性问题
    短短几行css代码实现滚动条效果
    Apache服务器的安装和配置
    闭包
  • 原文地址:https://www.cnblogs.com/liez/p/5399967.html
Copyright © 2020-2023  润新知