首页 > 编程语言 > 详细

【python小练】图片爬虫之BeautifulSoup4

时间:2016-04-17 06:20:47      阅读:178      评论:0      收藏:0      [点我收藏+]

Python3用不了Scrapy!

Python3用不了Scrapy!

Python3用不了Scrapy!

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

 

先前用正则表达式匹配出符合要求的<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:太宰桑真是太萌辣(●‘?‘●)?♥不说了再去看一遍~

 

【python小练】图片爬虫之BeautifulSoup4

原文:http://www.cnblogs.com/liez/p/5399967.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!