请教一个爬虫的问题

2016-06-16 20:24:23 +08:00
 buptlishantao
http://china.globalhardwares.com/sell/show-415527.html
怎么将里面 右侧的 邮件、电话等图片下载下来

更进一步是 如何识别 这个图片里面的 文字啊?

感激不尽
3038 次点击
所在节点    Python
14 条回复
wuhuaji
2016-06-16 21:18:18 +08:00
python 是有图像处理模块( pil ),当时我用 Python 写爬虫的时候,就想用这个处理模块识别验证码,但是发现识别率非常低,大概正确率在 10%。

我看了一下,你要的识别的图片,毫无疑问会更低,而且中文不知道能识别吗?

我觉得,想要识别图像,还具有非常强的图像处理的知识才能搞定。如果只是调用几个库函数,结果几乎不可用。
WinterWu
2016-06-16 21:22:41 +08:00
这个和爬虫没关系吧。找个 OCR 模块来提取文字吧。没做过这个,随手搜到个链接 https://realpython.com/blog/python/setting-up-a-simple-ocr-server/
你找找看, python OCR 好像都是对 Tesseract-OCR 的封装
buptlishantao
2016-06-16 21:33:41 +08:00
@wuhuaji
@WinterWu

我现在面临的是更前面的一个问题,就是如何把这个图片爬取下来, 在网页的 html 里,没有发现这个图片的 url 链接
bdbai
2016-06-16 21:46:16 +08:00
@buptlishantao 我来猜一下,它的邮件、电话是异步获取后用 js 呈现的。
ss098
2016-06-16 21:50:12 +08:00
源码里确实是有这张图片的链接的,经过测试,需要添加 Referer 头后可以正常访问。
Amayadream
2016-06-16 21:56:40 +08:00
直接在 html 里就有,<img align="absmddle" src="xxxxxx">,匹配一下就行了,至于怎么识别图片我就不了解了
buptlishantao
2016-06-16 22:01:14 +08:00
icedx
2016-06-16 22:04:57 +08:00
稍微切一下图就可以 OCR 思路给你了
还是不会的话可以提供有偿服务哦
WinterWu
2016-06-16 22:05:55 +08:00
@buptlishantao 源码里有链接里有,仔细看一下。如果你直接打开找那个大图是没有的,但是:
1. 下面有 3 个小图片就是,第一个就是 <div><img src="http://img.china.globalhardwares.com/products/201107/29/f7397aba-c306-46d8-8253-0beabfd95ae8.jpg" width="60" height="60" onmouseover="if(this.src.indexOf('nopic60.gif')==-1)Album(0, 'http://img.china.globalhardwares.com/products/201107/29/f7397aba-c306-46d8-8253-0beabfd95ae8.jpg');"
2. 后面还有两个没图片,但是也是无图片的地址,自己做个判断处理就好了。
practicer
2016-06-16 22:11:00 +08:00
补充下前面网友提到的 tesseract ,可以将清晰的易识别的文字图片转成字符串,成功率取决于清晰度,如果清晰度不够,要用到 pillow 库处理图片, pillow 等于 python 的 photoshop 。回到 tesseract ,是命令行工具,所以不能用 pip 安装,下载安装压缩包后添加根目录到环境变量即可使用,添加到
Amayadream
2016-06-16 22:13:45 +08:00
@buptlishantao 在请求的时候 headers 里加上 Referer 就能请求到了
import requests

url = 'http://china.globalhardwares.com/extend/image.php?auth=En1EdidbTywNNWheCC5WZzNVNgVFdgI2bFJFe3hL'
headers = {"Referer":"http://china.globalhardwares.com/"}
r = requests.get(url, headers=headers, stream=True)
with open("d:/1.png", 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
f.flush()
f.close()
jugelizi
2016-06-16 22:32:46 +08:00
说真的
这个已经很好识别了
practicer
2016-06-17 09:04:22 +08:00
@Amayadream 在这个基础上写到获取所有联系信息,并且下载图片到本地,然后通过 tesseract 转图为字符串,附代码:
https://github.com/nicky2015/practier/blob/master/spider/getContact.py
我的环境是: python2.7 + windows :

这是结果:

瑞安市主峰标准件制造有限公司[已核实]
通过认证[诚信档案]
联系人黄德海(先生)
会员 [当前离线] [加为商友] [发送信件]
邮件
电话
手机
地区浙江-温州市-瑞安市
地址浙江省瑞安市塘下镇下林工业区罗山大道 5 号
----------
Image downloads here: D:\emailPic.png
Image downloads here: D:\cellPic.png
Image downloads here: D:\phonePic.png

Starting retrieve text from images with tesseract...

image emailPic.png convertes to text: zP90000@126.com
image phonePic.png convertes to text: 36 — 577 — 6536563o
image cellPic.png convertes to text: 13806850329

要安装一个外部程序 tesseract 和 python 的接口包 pytesseract
1.windows 平台下载地址 https://sourceforge.net/projects/tesseract-ocr-alt/
2.包安装: pip install pytesseract
slysly759
2016-06-17 12:41:26 +08:00
刚刚楼上给的解决方案不错
下面我来说一下我的思路:
1.绕过 image.php 的图片生成
采用 selenium+driver 的方式直接在固定位置截屏然后 PIL 直接识别
2.获取到文中的图片链接修改 user-agent 获取图片
我初步看了一下,这个图片是由 image.php 生成 获取?auth=后面参数输出图片,你把原来的请求头复制一下就可以得到 respose 为图片的结果,最后 PIL 导出,十分简单。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/286277

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX