简单爬虫脚本——对百度贴吧的帖子中的图片进行爬取,可以爬取下一页
2018-09-12 18:57
85 查看
前几天突然间想去下载一点女神的图片!
但是自己又不会批量下载,所以只能手动搞起,结果花了一个半小时,一个一个点保存,才保存了一百多个!那么我怎么才能快一点呢,因此接触到了爬虫,不得不说,兴趣才是驱动学习的最终力量!
下面进入正题:
我有什么需求?
1.要对百度贴吧-周慧敏吧中的一个最多最全的帖子进行爬取,下载出这个帖子中所有女神的图片点击进入帖子
2.然后就是欣赏就可以了
具体实现:
1.首先得到了这个帖子的首页就要对页面进行分析
def getHtml(url): page = urllib.request.urlopen(url) html = page.read() return html
利用
page = urllib.request.urlopen(url)解析出html页面信息,以备取出图片的url信息,把page信息转为字符串形式存到html中再返回页面的html
2.对html进行解析,使用正则表达式提取出对自己有用的信息,在一个页面中将所有的相关有用的图片url找到,然后存入到imgurl中,方便以后遍历
def getImg(html): reg = r'class="BDE_Image" src="([.*\S]*\.jpg)" ' imgre = re.compile(reg) imgurl = re.findall(imgre, html) return imgurl
3.想要抓取帖子里的所有图片,要知道先要实现抓取并下载一个页面的图片,不能心急!这个要用到一个循环来解决,每次都将imgurl取出来,并且打开这个.jpg文件:
然后把这个.jpg文件写入到文件夹中`f.write((urllib.request.urlopen(imgList)).read())`。
- 这里会自动生成一个图片名
f = open("pic/" + str(imgCount) + ".jpg", 'wb')
。 然后把这个.jpg文件写入到文件夹中
f.write((urllib.request.urlopen(imgList)).read())
。关闭
f.close()
for imgList in imgLists: f = open("pic/" + str(imgCount) + ".jpg", 'wb') f.write((urllib.request.urlopen(imgList)).read()) f.close() imgCount += 1
4.到这里为止一页的抓取工作就有了,那么进行全部每页帖子的抓取了呢
首先我要去看一下到底有多少的页面,然后发现有53页,这里也需要一个for循环来实现分页爬取:这里看第一页和第二页的url有什么区别:http://tieba.baidu.com/p/5601213420?pn=1与http://tieba.baidu.com/p/5601213420?pn=2。我们能发现只有后面的“pn=*”有不一样的地方,所以我们就可以利用这点每次都打开一个页面来进行爬取
这里利用
re.sub()
对url进行重组,也就是
html = getHtml(re.sub('pn=\d','pn=%d'%i,Pages))
遇到的问题:
在不管时间延迟的情况下,应该是自己的爬虫被网站识别出来了所以在下载了600+图片的时候莫名其妙停止
解决的方法是进行一个时间延迟的处理,每爬取5页就停下来让爬虫歇一会,歇5秒钟就够了(利用pageCount来计数)
if pageCount == 5: time.sleep(5) pageCount = 0
看成果
贴代码:
import re import urllib.request import time #爬取网页html def getHtml(url): page = urllib.request.urlopen(url) html = page.read() return html #获取图片链接的方法 def getImg(html): reg = r'class="BDE_Image" src="([.*\S]*\.jpg)" ' imgre = re.compile(reg) imgurl = re.findall(imgre, html) return imgurl imgCount = 0 pageCount = 0 Pages = 'http://tieba.baidu.com/p/5601213420?pn=1' for i in range(1, 53): html = getHtml(re.sub('pn=\d', 'pn=%d'%i , Pages)) html = html.decode('UTF-8') imgLists = getImg(html) #for把获取到的图片都下载到本地pic文件夹里,保存之前先在本地建一个pic文件夹 for imgList in imgLists: f = open("pic/" + str(imgCount) + ".jpg", 'wb') f.write((urllib.request.urlopen(imgList)).read()) f.close() imgCount += 1 if pageCount == 5: time.sleep(5) pageCount = 0 print("全部抓取完成")阅读更多
相关文章推荐
- Python实现简单爬虫功能--批量下载百度贴吧里的图片
- 简单爬虫,爬去百度贴吧图片
- java爬虫实战简单用Jsoup框架进行网页爬虫(如抓取网页图片)
- Python爬虫_简单获取百度贴吧图片
- 【python爬虫】百度贴吧帖子图片批量保存爬虫
- 缩放图片的ImageView 可以进行两指缩放,并且可以进行拖拉的ImageView最简单原生的实现
- python3 多页爬虫爬取百度贴吧帖子所有图片
- 【Python3.6爬虫学习记录】(四)爬取百度贴吧某帖子内容及图片
- Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
- Python爬虫实战(五) :下载百度贴吧帖子里的所有图片
- Python爬虫实战(1)——百度贴吧抓取帖子并保存内容和图片
- [置顶] 【python 爬虫】百度贴吧帖子所有楼层图片爬虫
- Python-简单的爬虫案例(百度贴吧-图片)
- Python3 简单爬虫爬取百度贴吧帖子
- 使用postgreSQL DataSync 进行pg数据库升级 数据同步 升级脚本生成, postgreSQL DataSync简单教程
- Python爬虫试水————爬取丽水学院百度贴吧帖子信息&分析
- android 实现edittext输入内容后可以点击右侧小图片进行清除内容
- linux下用python进行opencv开发----简单的图片操作
- python简单爬虫(下载知乎图片示例)
- 【简单】H5中使用jQuery脚本 对静态盒模型进行向下延伸动画的记录