V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
buptlishantao
V2EX  ›  Python

请教一个爬虫的问题

  •  
  •   buptlishantao · 2016-06-16 20:24:23 +08:00 · 3205 次点击
    这是一个创建于 3111 天前的主题,其中的信息可能已经有所发展或是发生改变。
    http://china.globalhardwares.com/sell/show-415527.html
    怎么将里面 右侧的 邮件、电话等图片下载下来

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

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

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

    我觉得,想要识别图像,还具有非常强的图像处理的知识才能搞定。如果只是调用几个库函数,结果几乎不可用。
    WinterWu
        2
    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
        3
    buptlishantao  
    OP
       2016-06-16 21:33:41 +08:00
    @wuhuaji
    @WinterWu

    我现在面临的是更前面的一个问题,就是如何把这个图片爬取下来, 在网页的 html 里,没有发现这个图片的 url 链接
    bdbai
        4
    bdbai  
       2016-06-16 21:46:16 +08:00 via Android
    @buptlishantao 我来猜一下,它的邮件、电话是异步获取后用 js 呈现的。
    ss098
        5
    ss098  
       2016-06-16 21:50:12 +08:00
    源码里确实是有这张图片的链接的,经过测试,需要添加 Referer 头后可以正常访问。
    Amayadream
        6
    Amayadream  
       2016-06-16 21:56:40 +08:00
    直接在 html 里就有,<img align="absmddle" src="xxxxxx">,匹配一下就行了,至于怎么识别图片我就不了解了
    buptlishantao
        7
    buptlishantao  
    OP
       2016-06-16 22:01:14 +08:00
    icedx
        8
    icedx  
       2016-06-16 22:04:57 +08:00
    稍微切一下图就可以 OCR 思路给你了
    还是不会的话可以提供有偿服务哦
    WinterWu
        9
    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
        10
    practicer  
       2016-06-16 22:11:00 +08:00 via Android
    补充下前面网友提到的 tesseract ,可以将清晰的易识别的文字图片转成字符串,成功率取决于清晰度,如果清晰度不够,要用到 pillow 库处理图片, pillow 等于 python 的 photoshop 。回到 tesseract ,是命令行工具,所以不能用 pip 安装,下载安装压缩包后添加根目录到环境变量即可使用,添加到
    Amayadream
        11
    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
        12
    jugelizi  
       2016-06-16 22:32:46 +08:00
    说真的
    这个已经很好识别了
    practicer
        13
    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: [email protected]
    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
        14
    slysly759  
       2016-06-17 12:41:26 +08:00
    刚刚楼上给的解决方案不错
    下面我来说一下我的思路:
    1.绕过 image.php 的图片生成
    采用 selenium+driver 的方式直接在固定位置截屏然后 PIL 直接识别
    2.获取到文中的图片链接修改 user-agent 获取图片
    我初步看了一下,这个图片是由 image.php 生成 获取?auth=后面参数输出图片,你把原来的请求头复制一下就可以得到 respose 为图片的结果,最后 PIL 导出,十分简单。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   870 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 21:44 · PVG 05:44 · LAX 13:44 · JFK 16:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.