当前位置: 首页>后端>正文

Python tuchuang Python图床爬取

贴一个知乎的回答

不贴代码的都是耍流氓!


===========================



这是很久以前写的第一个爬虫,为了爬一个新发现的图床网站 (没错,服务器在美国,上面有你想要的东西,自己去发掘吧)



不过网速很一般,还经常掉线,需要有耐心。



不知道会不会被和谐,为了满足大家好奇心放出来吧 http://ihostimg.com/



几个月之前写的了,刚刚试了下,还可以跑,看来这个网站的代码基本没改。





1、爬图床的爬虫



功能:直接在这个网站找到某个人的相册网址,输入开始和结束的相册数,全部爬到本地,并新建文件夹按照网页相册名字存储。



说明:并没有用任何库,装了Python可以直接运行,想下载其他相册需要手动去找网址复制修改。



代码如下,如果你运行过了,应该回来点赞!(逃



#!/usr/bin/env python
#! -*- coding: utf-8 -*-
import urllib,urllib2,cookielib
import re
import os,time
#返回网页源代码
def getHtml(hUrl):
	print '获取网页源代码'
	user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
	headers = {'User-Agent' : user_agent ,'Connection':'keep-alive'}
	req = urllib2.Request(hUrl,headers = headers)
	html = urllib2.urlopen(req)
	srcCode = html.read()
	html.close()
	#完整网页源代码
	# print srcCode
	return srcCode

#返回页面中所有的相册链接(后面处理的时候先加上主站开头)
#传入参数:html源代码
def getGalleryUrl(gsrcCode):
	galleryUrl = re.findall(r'<a.*?href="(.*?\.html)">',gsrcCode)
	#print galleryUrl
	return galleryUrl

def get_Title(TsrcCode):
	#print TsrcCode
	getTitle = re.compile(r'<div style="height:18px">(.*?)</div>')
	getNum   = re.compile(r'<div style="height:18px">(.*?)</div>.*?<br.*?>\(\W(.*?)\Wimages.*?\)</span></li>')
	title = getNum.findall(TsrcCode)
	for x in title:
		print x[0] + '[' +x[1] +'P]'
	return title

def getImg(theGalleryUrl,startGallery):
	srcCode = getHtml(theGalleryUrl)
	#网站开头
	head = 'http://ihostimg.com'
	#每个fullUrl的元素对应一个相册
	fullUrl = getGalleryUrl(srcCode)
	print fullUrl
	#每个相册路径前都加入主站开头
	for num in xrange(len(fullUrl)):
		fullUrl[num] = head + fullUrl[num]
	#得到完整相册地址
	print fullUrl
	#获取每个相册的名称和包含的图片数来建立路径
	#每个title元素对应一个相册名称+图片数
	title = get_Title(srcCode)
	#相册索引
	GalleryNum = startGallery
	#对网页中图片建立正则
	pattern = re.compile(r'<a.*?href="(.*?\.jpeg)">')
	for imgUrl in fullUrl[startGallery:]:
		#先建立对应相册名的文件夹
		path = mkdir(title[GalleryNum])
		GalleryNum += 1
		#获得包含图片的网页源代码
		#在源代码中匹配图片下载地址
		imgSrcCode = getHtml(imgUrl)
		imgSrc = pattern.findall(imgSrcCode)
		print imgSrc
		ImgNum = 0
		for i in imgSrc:
			# urlretrieve速度慢不稳定
			# urllib.urlretrieve(i, path +'%s.jpg' % ImgNum)
			urlopen = urllib.URLopener()
			#下载图片流
			fp = urlopen.open(i)
			data = fp.read()
			#清除并以二进制写入
			f = open(path + '%s.jpg' % ImgNum, 'w+b')
			f.write(data)
			f.close()
			ImgNum += 1
			print u"正在下载"
			print i
			time.sleep(2)

		print '第' + str(GalleryNum) + '个相册完成!'

def mkdir(list):
	path = "..\nothing\" + unicode(list[0],'utf8') + '[' + list[1] + "P]\"
	# 判断路径存在与否
	path = path.strip() # 去掉首尾空格
	# path = path.rstrip('') # 去掉右侧 \ 符号
	exits = os.path.exists(path)
	if not exits: # 不存在路径就创建
		os.makedirs(path)
		print path + u'创建成功'
	else:
		print path + u'已经存在'
		return path
	return path

# myUrl = 'http://ihostimg.com/mygallery.php?gallerybelongto=147258'
myUrl = 'http://ihostimg.com/mygallery.php?gallerybelongto=jomiler00'
page = int(raw_input(unicode("第几个相册开始? 请输入数字\n",'utf8')))
getImg(myUrl,page)



上面的myurl就是需要爬的相册示例,为了说明特意贴了两个网址,请自行尝试。




2、第二个可能没太多人感兴趣了,爬百度图片的,输入页码,关键字,直接爬下来。


百度图片爬虫  



https://www.xamrdz.com/backend/3v41926468.html

相关文章: