请教一个爬虫的问题 - V2EX
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 3568 次点击
    这是一个创建于 3428 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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     Solana     5401 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 01:24 PVG 09:24 LAX 17:24 JFK 20:24
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86