Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1690330
  • 博文数量: 410
  • 博客积分: 9563
  • 博客等级: 中将
  • 技术积分: 4517
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-03 19:59
个人简介

文章分类

全部博文(410)

文章存档

2017年(6)

2016年(1)

2015年(3)

2014年(4)

2013年(32)

2012年(45)

2011年(179)

2010年(140)

分类: LINUX

2013-04-02 16:34:26


一、原始需求
我需要根据单词找几百个图片,烦的不得了,还没办法用软件脱机抓取,所以干脆ipython来弄

打开ipython环境,使用下面几个命令:

  1. # 打开单词文本,每个单词一行
  2. # 读入lines中
  3. cd Etools/EF2A/
  4. filename="ef2a.csv"
  5. f=open(filename,"r")
  6. lines=f.readlines()
  7. f.close()

  8. # 每次读10行,在firefox中开10个标签

  9. i=0;s=lines[i*10:i*10+10];es=[ i.split(';')[0] for i in s];fes=[i.replace(' ','_').strip() for i in es];
  10. for i in fes: print i
  11. for i in es:
  12.     comm=" -new-tab cn.bing.com/images/search?q=%s" % i.replace(' ','+')
  13.     !firefox $comm
每次手动修改 i=0的,一次开10个网页,找到图片后保存


二、最终版本
  • 配置firefox关闭最后一个标签也不退出
    1. 打开 about:config
    2. 搜索 closewindow ,找到 browser.tabs.closeWindowWithLastTab 项目,把值改成 false。
  • 修改上面的脚本,变成一次一条的执行查询,建立一个文件 catchp.py , 内容如下:

    点击(此处)折叠或打开

    1. #!/usr/bin/env python
    2. # -*- coding: UTF-8 -*-

    3. # FileName : catchp.py
    4. # Last Change: 2013年04月03日
    5. # AUTHOR : BaiLiang , bailiangcn@gmail.com

    6. """
    7.     本脚本主要用于交互式的查询图片
    8. """

    9. __revision__ = '0.1'

    10. import os

    11. def readfile(filename):
    12.     """ 从文件读取内容进入变量 """
    13.     f=open(filename,"r")
    14.     lines=f.readlines()
    15.     f.close()
    16.     return lines

    17. def catchp(n,lines):
    18.     secline=lines[n:]
    19.     i = 0
    20.     esl=[ s.split(';')[0] for s in secline]
    21.     for es in esl:
    22.         i += 1
    23.         comm0 = "echo %s | xsel --clipboard --input" % es.replace(' ','_').strip()
    24.         comm1=" firefox -new-tab cn.bing.com/images/search?q=%s" % es.replace(' ','+')
    25.         os.system(comm0)
    26.         os.system(comm1)
    27.         raw_input("正在处理 %s %s : " % (i+n,es))

    28. def main():

    29.     print """
    30.         本脚本主要用于交互式的查询图片,请在ipython 环境执行
    31.         """

    32. if __name__ == '__main__':

    33.     main()
    使用方法:
    1. 打开ipython环境,在ipython环境内输入以下命令。
      1. # 进入文本文件所在的目录
      2. cd ~/Etools/EF2B

      3. # 把父目录加入路径,以便一会能够找到 catchp.py
      4. import sys
      5. import os
      6. sys.path.append(os.pardir)

      7. #导入刚才建立的 catchp.py
      8. import catchp

      9. #读入文本文件
      10. lines=catchp.readfile("ef2b.csv")

      11. #开始一条一条的根据单词查询图片,每个单词会自动放入剪贴板,在ipython 环境内回车查询下一个单词

      12. # 118表示从 118条开始,循环内想中断 ctrl+c
      13. catchp.catchp(118,lines)
  • 现在可以挑选图片,然后鼠标右键点击,保存图片,ctrl+v粘贴文件名,然后点击ipython窗口,回车继续下一个单词,我仍然觉得上面个步骤太麻烦,于是继续 DIY之
  1. 先确认系统安装了 xdotool,如果没有,安装命令是
    1. sudo apt-get install xdotool

  2. 建立一个脚本 savepic.sh ,内容是,注意下面的粉色内容需要使用 xprop 命令查询(下面的xdotool 系列命令需要 firefox 的 pentadactyl 插件的配合)

    点击(此处)折叠或打开

    1. #!/bin/bash

    2. xdotool click 3
    3. xdotool key V
    4. sleep 0.5
    5. xdotool key ctrl+v
    6. sleep 0.5
    7. xdotool key Return
    8. sleep 0.5
    9. xdotool key Return
    10. sleep 0.5
    11. xdotool key d
    12. sleep 0.5
    13. xdotool key d
    14. sleep 0.5
    15. xdotool key d
    16. sleep 0.5
    17. xdotool key d
    18. sleep 0.5
    19. # 使用 xprop 命令,点击 ipython  所在窗口,窗口名称为下面的名称
    20. xdotool search --name "bl@bl-family: ~/Etools/EF2B" key Return
  3. 给 savepic.sh 增加执行权限
    1. chmod a+x savepic.sh
  4. 在ubuntu中做一个快捷键调用 savepic.sh 脚本


阅读(1126) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~