Python爬取百度贴吧图片

Python爬取百度贴吧图片

Python2.7.15
当我们需要从网页上大量下载东西时,Python是我们很好的帮手,这次我们以爬取壁纸吧的壁纸图片为例。

一.获取网址

首先从壁纸吧中选一个你喜欢的帖子打开,复制它的网址在这里插入图片描述

二.获取它的HTML源码

首先,我们要引入对应模块

import re
import urllib
import sys
reload(sys)
sys.setdefaultencoding('utf8')

re是正则表达式模块,用来匹配图片地址。
urllib模块用来获取HTML源码。
重新加载sys模块将编码设置为utf8,python在安装时,默认的编码是ascii。

然后用urllib模块的函数来获取源码。

def getHtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html

运行一下,返回该网页的源码
在这里插入图片描述

三、用正则匹配源码中图片地址并下载

从源码中我们可以看到壁纸图片的格式是统一的
在这里插入图片描述
在这里插入图片描述
都是以src=开头,以jpg结尾,由此设置正则,并进行匹配

    reg = r'src="(https://imgsa.baidu.com/forum/w%3D580/sign=.*?\.jpg)"'
    imgre = re.compile(reg)
    imList = re.findall(reg, html)

其中,()表示 我们只取括号中的内容,不要之外的; ‘\ .’ 是 ‘.’的 转义

    for i in imList:
        #print(i)
        print x
        urllib.urlretrieve(i, '%s.jpg' % x)
        x += 1
    return x

使用for循环遍历匹配到你内容并放入i中,以x命名,并以jpg格式存储
这里返回x是为下一页的循环准备,以便每一页能接上

这里说一下页数问题
贴吧帖子一般都很长,会有好几十页,我们在爬取的时候如何翻页呢?这就要看它的格式了,比如这次的壁纸帖子,就是在原地址后加了个pn=,这样我们可以用for循环来翻页
在这里插入图片描述

for k in range(1,89):
    ul = url+ str(k)
    print ul
    html = getHtml(ul)
    print html

四.完整代码与结果

import re
import urllib
import sys
reload(sys)
sys.setdefaultencoding('utf8')

def getHtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html

def getImg(html, x):
    reg = r'src="(https://imgsa.baidu.com/forum/w%3D580/sign=.*?\.jpg)"'
    imList = re.findall(reg, html)
    for i in imList:
        print x
        urllib.urlretrieve(i, '%s.jpg' % x)
        x += 1
    return x

x = 1
url = "https://tieba.baidu.com/p/4364768066?pn="
for k in range(1,89):
    ul = url+ str(k)
    print ul
    html = getHtml(ul)
    x = getImg(html, x)

在这里插入图片描述
实在太多爬到八百多我就停了

猜你喜欢

转载自blog.csdn.net/memoirs_pz/article/details/83212774