Surprised => indulgence => Calm => Lost => Panic =>Calm

python爬去贴吧图(第一页)

Python screenpage 1905℃ 0评论

2

博主使用的是python 3.4的. 如果有使用python 2.x的朋友,参照文中的python 2和python 3的不同进行修改

在之前的爬去模板中进行扩充,爬去贴吧的图片.

import urllib.request
import os

os.mkdir('贴吧图')
os.chdir('贴吧图')

导入os是因为需要新建一个文件夹.

os.mkdir和os.chdir是两个很重要的函数.创建文件夹和改变路径.

所以到了这一步,文件的存取路径应该是在我们创建的 贴吧图 这个路径下了.

url = 'http://tieba.baidu.com/p/3937684305/'
img_addrs = []

response = urllib.request.urlopen(url)

html = response.read()
html = html.decode('utf-8')

这个部分也类似与模板,都需要用到这一步的.

将response读取出后,存放在html,需要用’utf-8’进行解码.再存放在html中.不然会是以二进制的方式存取,不便我们操作.

当然,你可以使用

url = input('请输入您需要爬取的贴吧图的地址')

这样的方式更加灵活.将输入的地址放入url,再进行操作.

不过,这也是属于代码美化的问题了.

现在我们已经得到了想要爬取的网页的源代码.放在html中了.

在这里,我们用chrome打开我们要爬取的链接:http://tieba.baidu.com/p/3937684305/

贴吧截图1

鼠标放在图上,右键-审查元素

可以看到:

贴吧截图2

src=””中的链接就是图片的下载链接了.我们只需要选出链接,就可以像模板爬虫一样下载了.

现在的任务是如何选出链接:我们可以用正则表达式,这是一个非常快捷,方便,且不容易出错的方式.

但是,这里我们暂且不用这个方法.我们使用find函数.

我们发现,链接前面都出现了

class="BDE_Image" src="

所以使用:

head = html.find('class="BDE_Image" src="')

找到其中的链接的开头.

链接的结尾,当然是.jpg结尾的.如下:

 end = html.find('.jpg', head, head+255)

链接不会长于255个字符.

当找到head,且找到end的时候,那么就返回这个链接.

因为这个网页中有多个图片地址,所以我们放在了一个列表中.找到链接时候,就添加到这个链表.

img_addrs.append(html[head+23:end+4])

这里,可以数到head找寻的字符串的23. end找寻的字符串’.jpg’长度是4.将这个区间的字符串放入img_addrs.

所以我们已经得出了地址.接下来只需要用循环就可以得出所有的图片地址了.如下:

count = 0
while head != -1:
    end = html.find('.jpg', head, head+255)
    if end != -1:
        #print(html[head+23:end+4])
        img_addrs.append(html[head+23:end+4])
    else:
        end = head + 23

    head = html.find('class="BDE_Image" src="', end)
    count = count + 1
    if count > 20:
        break

count的作用是只需要下载20张图片就够了.并不需要太多.

最后将图片写入文件就可以了.

for each in img_addrs:
    filename = each.split('/')[-1]
    with open(filename, 'wb') as f:
        img = urllib.request.urlopen(each).read()
        f.write(img)

这里的each.split(‘/’)[-1]是为文件得出一个文件名.文件名是图片的下载地址的最后一个’/’后面的字符串.

依次写入,得出图片.

如果你有什么疑问,可以写下你的评论,我们共同探讨的.

 

 

转载请注明:Imekaku-Blog » python爬去贴吧图(第一页)

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址