1. 首先通过urllib获取网页的源码

# 定义一个getHtml()函数
def getHtml(url):
try:
page = urllib.urlopen(url) # urllib.urlopen()方法用于打开一个URL地址
html = page.read() # read()方法用于读取URL上的数据
except Exception as e:
html = ''
return html

2. 获取下一页的url链接,当本页的图片链接获取完毕,再继续获取下一页的。使用Python正则表达式匹配需要的字段

# 得到下一页的url
def get_page_url(html):
url_reg = r'<a href="(.*)">下一页</a>'
url_pattern = re.compile(url_reg)
fanye_urls = url_pattern.findall(html)
fanye_url = 'https://tieba.baidu.com' + fanye_urls[0] if fanye_urls else ''
return fanye_url

3. 获取每一页的图片链接,将之放入一个总的数组,最后通过链接下载图片

def getImg(html):
img_reg = r'https://.[^\s]+?.jpg|https://.[^\s]+?.png' # 正则表达式,得到图片地址
img_pattern = re.compile(img_reg) # re.compile() 可以把正则表达式编译成一个正则表达式对象.
imgList = img_pattern.findall(html) # img_pattern.findall() 方法读取html 中包含 img_reg(正则表达式)的 数据,数组形式
return imgList

4. 下载图片。使用urllib.urlretrieve()方法,直接根据链接将图片下载到本地

def down_img(imgList):
x = 0
for imgUrl in imgList:
try:
# 核心是urllib.urlretrieve()方法,直接将远程数据下载到本地,图片通过x依次递增命名
urllib.urlretrieve(imgUrl, 'E:\img\%s.jpg' % str(x + 1))
print '成功下载第%s张图片时:%s' % (str(x + 1), str(imgUrl))
x += 1
except Exception as e:
print '下载第%s张图片时失败:%s' % (str(x + 1), str(imgUrl))
print e
continue
return imgList

5. 先爬取第一页的图片链接,然后通过while循环,继续读取第二页,.....,等到最后,将所有从网上爬取的图片链接使用extend()方法放入总的数组内,然后统一下载

all_img_urls = []
# 得到网页源码
html = getHtml("https://tieba.baidu.com/p/5407739329")
fanye_url = get_page_url(html)
# 得到图片链接的数组
imgList = getImg(html)
# 将imgList数组存入总的图片数组内
all_img_urls.extend(imgList)
fanye_count = 0 # 累计翻页数
while 1:
try:
next_html = getHtml(fanye_url)
fanye_url = get_page_url(next_html)
next_imgList = getImg(next_html)
fanye_count += 1
print('第%s页' % fanye_count)
all_img_urls.extend(next_imgList)
if fanye_url == '' and next_imgList == []:
print('已到最后一页, 开始下载:')
break
except Exception as e:
print e
continue
down_img(all_img_urls)

总的代码如下:

# coding=utf-8
"""下载百度贴吧内的图片"""
import re
import urllib # 定义一个getHtml()函数
def getHtml(url):
try:
page = urllib.urlopen(url) # urllib.urlopen()方法用于打开一个URL地址
html = page.read() # read()方法用于读取URL上的数据
except Exception as e:
html = ''
return html # 得到下一页的url
def get_page_url(html):
url_reg = r'<a href="(.*)">下一页</a>'
url_pattern = re.compile(url_reg)
fanye_urls = url_pattern.findall(html)
fanye_url = 'https://tieba.baidu.com' + fanye_urls[0] if fanye_urls else ''
return fanye_url def getImg(html):
img_reg = r'https://.[^\s]+?.jpg|https://.[^\s]+?.png' # 正则表达式,得到图片地址
img_pattern = re.compile(img_reg) # re.compile() 可以把正则表达式编译成一个正则表达式对象.
imgList = img_pattern.findall(html) # img_pattern.findall() 方法读取html 中包含 img_reg(正则表达式)的 数据,数组形式
return imgList def down_img(imgList):
x = 0
for imgUrl in imgList:
try:
# 核心是urllib.urlretrieve()方法,直接将远程数据下载到本地,图片通过x依次递增命名
urllib.urlretrieve(imgUrl, 'E:\img\%s.jpg' % str(x + 1))
print '成功下载第%s张图片时:%s' % (str(x + 1), str(imgUrl))
x += 1
except Exception as e:
print '下载第%s张图片时失败:%s' % (str(x + 1), str(imgUrl))
print e
continue
return imgList if __name__ == '__main__':
all_img_urls = []
# 得到网页源码
html = getHtml("https://tieba.baidu.com/p/5407739329")
fanye_url = get_page_url(html)
# 得到图片链接的数组
imgList = getImg(html)
# 将imgList数组存入总的图片数组内
all_img_urls.extend(imgList)
fanye_count = 0 # 累计翻页数
while 1:
try:
next_html = getHtml(fanye_url)
fanye_url = get_page_url(next_html)
next_imgList = getImg(next_html)
fanye_count += 1
print('第%s页' % fanye_count)
all_img_urls.extend(next_imgList)
if fanye_url == '' and next_imgList == []:
print('已到最后一页, 开始下载:')
break
except Exception as e:
print e
continue
down_img(all_img_urls)

使用python爬取百度贴吧内的图片的更多相关文章

  1. Python——爬取百度百科关键词1000个相关网页

    Python简单爬虫——爬取百度百科关键词1000个相关网页——标题和简介 网站爬虫由浅入深:慢慢来 分析: 链接的URL分析: 数据格式: 爬虫基本架构模型: 本爬虫架构: 源代码: # codin ...

  2. python 爬取百度url

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-08-29 18:38:23 # @Author : EnderZhou (z ...

  3. python爬取百度贴吧帖子

    最近偶尔学下爬虫,放上第二个demo吧 #-*- coding: utf-8 -*- import urllib import urllib2 import re #处理页面标签类 class Too ...

  4. 爬虫实战(一) 用Python爬取百度百科

    最近博主遇到这样一个需求:当用户输入一个词语时,返回这个词语的解释 我的第一个想法是做一个数据库,把常用的词语和词语的解释放到数据库里面,当用户查询时直接读取数据库结果 但是自己又没有心思做这样一个数 ...

  5. 假期学习【十一】Python爬取百度词条写入csv格式 python 2020.2.10

    今天主要完成了根据爬取的txt文档,从百度分类从信息科学类爬取百度词条信息,并写入CSV格式文件. txt格式文件如图: 为自己爬取内容分词后的结果. 代码如下: import requests fr ...

  6. python爬取百度搜索结果ur汇总

    写了两篇之后,我觉得关于爬虫,重点还是分析过程 分析些什么呢: 1)首先明确自己要爬取的目标 比如这次我们需要爬取的是使用百度搜索之后所有出来的url结果 2)分析手动进行的获取目标的过程,以便以程序 ...

  7. Python 爬虫练习: 爬取百度贴吧中的图片

    背景:最近开始看一些Python爬虫相关的知识,就在网上找了一些简单已与练习的一些爬虫脚本 实现功能:1,读取用户想要爬取的贴吧 2,读取用户先要爬取某个贴吧的页数范围 3,爬取每个贴吧中用户输入的页 ...

  8. python 爬取百度云资源

    pan1 1 import urllib.request 2 import re 3 import random 4 5 def get_source(key): 6 7 print('请稍等,爬取中 ...

  9. python爬取百度翻译返回:{'error': 997, 'from': 'zh', 'to': 'en', 'query 问题

    解决办法: 修改url为手机版的地址:http://fanyi.baidu.com/basetrans User-Agent也用手机版的 测试代码: # -*- coding: utf-8 -*- & ...

随机推荐

  1. 5 秒创建 k8s 集群 - 每天5分钟玩转 Docker 容器技术(115)

    据说 Google 的数据中心里运行着超过 20 亿个容器,而且 Google 十年前就开始使用容器技术. 最初,Google 开发了一个叫 Borg 的系统(现在命令为 Omega)来调度如此庞大数 ...

  2. 在Maven Central发布中文API的Java库

    原址: https://zhuanlan.zhihu.com/p/28024364 相关问题: 哪些Java库有中文命名的API? 且记下随想. 之前没有发布过, 看了SO上的推荐:Publish a ...

  3. 鸟哥的linux私房菜学习-(五)补充:重点回顾

    为了避免瞬间断电造成的Linux系统危害,建议做为服务器的Linux主机应该加上不断电系统来持续提供稳定的电力: 默认的图形模式登陆中,可以选择语系以及作业阶段.作业阶段为多种窗口管理员软件所提供,如 ...

  4. Keras:基于Theano和TensorFlow的深度学习库

    catalogue . 引言 . 一些基本概念 . Sequential模型 . 泛型模型 . 常用层 . 卷积层 . 池化层 . 递归层Recurrent . 嵌入层 Embedding 1. 引言 ...

  5. 01-Java基础及面向对象

    JAVA基础知识 Java 是SUN(Stanford University Network,斯坦福大学网络公司)1995年推出的一门面向 Internet 的高级编程语言. Java 虚拟机(JVM ...

  6. HTMLTestRunner测试报告中文乱码问题解决

    在学习python selenium自动化测试学习中遇到HTMLTestRunner测试报告出现乱码的问题 Test Group/Test case Count Pass Fail Error Vie ...

  7. phpstorm+wamp+xdebug配置php调试环境

    本篇文章主要是:教大家如果搭建一套phpstorm+wamp+xdebug调试php的环境现在大多数的程序员使用的调试方式一般都是echo, var_dump, file_put_contents等其 ...

  8. TurnipBit—MicroPython开发板:妥妥拽拽零基础也能玩编程

    可视化编程网站入口:www.turnipbit.com 说到编程.谈到硬件,你也许会想到屌丝逆袭女神的"传奇"故事,也许会浮现出带着眼镜.头发稀少.无精打采的程序猿形象." ...

  9. Winform跨窗体操作控件(使用委托)

    Winform跨窗体操作控件是winform开发中很常见的形式,最常见且简单有效的方式便是使用委托的方式来进行操作,下面我将通过一个小实例来说明如何使用委托跨窗体实现控件操作. 实例介绍:两个窗体,F ...

  10. WPF自定义Window样式(1)

    1. 引言 WPF是制作界面的一大利器.最近在做一个项目,用的就是WPF.既然使用了WPF了,那么理所当然的,需要自定义窗体样式.所使用的代码是在网上查到的,遗憾的是,整理完毕后,再找那篇帖子却怎么也 ...