Python爬虫之路——简单的网页抓图

转载自我自己的博客:http://www.mylonly.com/archives/1401.html

用Python的urllib2库和HTMLParser库写了一个简单的抓图脚本,主要抓的是http://desk.zol.com.cn/meinv/这个链接下的图片,通过得到图集的起始URL地址,得到第一张图片,然后不断的去获取其下一个图片的URL,继而得到所有首页的图集的图片。

整个源码如下,比较简单,写这个只是简单的练手而已

#coding: utf-8 #############################################################
# File Name: girls.py
# Author: mylonly
# mail: mylonly@gmail.com
# Created Time: Mon 09 Jun 2014 09:23:18 PM CST
#########################################################################
#!/usr/bin/python

import urllib2,HTMLParser,re

#根url
host = "http://desk.zol.com.cn"
#本地保存地址
localSavePath = '/data/girls/'
#起始图片html地址
startHtmlUrl = ''
#图片页Html的地址
htmlUrlList = []
#图片Url地址
imageUrlList = []
#根据得到的图片路径URL将图片下载下来保存本地
def downloadImage(url):
	cont = urllib2.urlopen(url).read()
	patter = '[0-9]*\.jpg';
	match = re.search(patter,url);
	if match:
		print '正在下载文件:',match.group()
		filename = localSavePath+match.group()
		f = open(filename,'w+')
		f.write(cont)
		f.close()
	else:
		print 'no match'

#根据首页得到的图片集遍历每个图片集
def getImageUrlByHtmlUrl(htmlUrl):
	parser = MyHtmlParse(False)
	request = urllib2.Request(htmlUrl)
	try:
		response = urllib2.urlopen(request)
		content = response.read()
		parser.feed(content)
	except urllib2.URLError,e:
		print e.reason

class MyHtmlParse(HTMLParser.HTMLParser):
	def __init__(self,isIndex):
		self.isIndex = isIndex;
		HTMLParser.HTMLParser.__init__(self)
	def handle_starttag(self,tag,attrs):
		if(self.isIndex):
			if(tag == 'a'):
				if(len(attrs) == 4):
					if(attrs[0] ==('class','pic')):
						newUrl = host+attrs[1][1]
						print '找到一处图片的网页链接:',newUrl
						global startHtml
						startHtmlUrl = newUrl
						getImageUrlByHtmlUrl(newUrl)
		else:
			if(tag == 'img'):
				if(attrs[0] == ('id','bigImg')):
						imageUrl = attrs[1][1]
						print '找到一张图片:',imageUrl
						downloadImage(imageUrl)
						#imageUrlList.append(imageUrl)	
			if (tag == 'a'):
				if (len(attrs) == 4):
					if (attrs[1] == ('class','next')):
						nextUrl = host + attrs[2][1]
						print '找到一处图片的网页链接:',nextUrl
						global startHtmlUrl
						if (startHtmlUrl != nextUrl):
							getImageUrlByHtmlUrl(nextUrl)
#分析首页得到每个图片集的链接
indexUrl = 'http://desk.zol.com.cn/meinv/'
m = urllib2.urlopen(indexUrl).read()
parserIndex = MyHtmlParse(True)
parserIndex.feed(m


### 实现Python截图搜题功能 为了实现Python截图搜题的功能,可以采用图像识别技术配合搜索引擎API来完成。具体来说,先通过截屏获取当前屏幕上的题目图片,再利用OCR(Optical Character Recognition)光学字符识别工具将图片中的文字转换成可编辑的文本形式,最后使用这些提取的文字作为关键字向在线数据库或搜索引擎发起查询请求。 #### 使用Pillow库进行截图操作 对于截取屏幕的操作,在Python中有多种方法可以选择,这里推荐使用`Pillow`这个强大的图像处理库来进行简单的全屏抓图或是指定区域内的画面捕捉[^2]。 ```python from PIL import ImageGrab def capture_screen(): img = ImageGrab.grab() # 抓取整个屏幕 return img ``` #### 应用Tesseract执行OCR任务 当获得了含有习题信息的画面之后,则需调用专门用于文字检测的服务——比如Google提供的免费版Tesseract OCR引擎。安装好对应环境后可通过pytesseract接口轻松读取出位图文件里的字符串数据。 ```python import pytesseract def ocr_image(image_path): text = pytesseract.image_to_string(Image.open(image_path), lang='chi_sim') # 支持中文识别 return text.strip() ``` #### 整合百度或其他搜索引擎API发送搜索请求 拿到解析后的纯文本串以后就可以考虑怎样定位到最接近的标准答案了。一种思路是借助第三方平台开放出来的RESTful API接口(像Baidu、Sogou等),按照官方文档说明构建合适的HTTP GET/POST包体并附带必要的认证参数提交给服务器端口;另一种则是直接模拟浏览器行为爬虫访问网页获取返回结果页面HTML源码进一步分析抽取有用部分。 ```python import requests def search_question(query_text): url = 'https://www.baidu.com/s' params = {'wd': query_text} response = requests.get(url, params=params) if response.status_code == 200: return response.text else: raise Exception('Search failed') ``` 综上所述,上述代码片段展示了如何基于Python语言编写一套简易版本的自动化在线查题脚本框架结构。当然实际应用过程中还需要针对不同场景做适当调整优化才能达到更好的效果。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值