【 – 写作指导】
篇一:《在Android进行Python软件开发》
让Python在Android系统上飞一会儿
分类: 4.—-WEB应用 2011-02-25 17:511307人阅读评论(0)收藏举报
第一节 在手机上配置Python运行环境
1.下载和安装 Scripting Layer for Android (SL4A)
Scripting Layer for Android (SL4A) 是一个开源项目,目标是为android系统提供脚本语言的支持,使用户可以直接在android平台上进行脚本语言的编辑、解释和执行。这些脚本语言已经可是使用很多封装好的android API来开发功能丰富的android应用程序,并且使开发变得更加的简单和高效!
这个平台支持多种脚本语言,比如 Python, Perl, JRuby, Lua, BeanShell, JavaScript, Tcl, shell 等,你可以选择你熟悉的语言进行开发,本系列教程使用Python为编程脚本语言 SL4A项目的地址:
页面打开后,你可以选择用手机扫描该页面的二维码将应用直接下载并安装到手机上,或者点击二维码图片,将应用下载的电脑上在传输到手机上安装。你要是懒得去项目主页,直接扫描下图的二维码即可:
2.下载和安装 Python for android
在项目主页面的右上方,有该应用支持的所有脚本语言的下载列表,如下图所示;
选择你使用的语言,打开相应的语言环境的下载页面,与下载SL4A的方式类似,将该语言包应用下载并安装到你的手机上。我打开的是Python的页面,如下图所示:
程序安装完成后,打开Python for Android应用,在应用的最上方会有一个Install的按钮,点击该按钮,就会自动下载Python相关的文件并解压和安装,这个过程结束后,你的android手机上的Python开发环境就配置好了!
3.第一个HelloWorld程序
打开SL4A应用,会进入Python示例代码列表,基本上是对主要API的演示,部分示例可能由于偏老,运行时会提示方法过期或者运行异常的问题,这个至少修改少许代码即可,有机会的话,我会在后续课程中介绍这是示例以及修正的方法。
点Menu键,然后点击Add,选择Python2.6.2,就会新建一个Python脚本文件,将文件的名字命名为:HelloPythonInAndroid.py
点击屏幕进入脚本编辑区,开始输入如下内容:
import android
droid = android.Android()
droid.makeToast(Hello, Python in Android‘)
输入完成后,如下图所示:
点击Menu,选择Save&Run,恭喜你,你已经用Python完成了第一个Android应用:HelloPythonInAndroid!
第二节 第一个有实用价值的应用
1.python预备知识
单行注释使用#号,#以后的内容是注释,不会被解释器解释执行执行;
import语句用来导入模块,后面跟模块名;
python中的变量不需要声明类型,变量被赋值之后类型会自动指定,这也是动态语言的特性之一;
元组,python基本数据结构之一,使用这样的形式表示:元组1=(数据1,数据2,数据3) 元组一旦生成后就不能修改了
元组可以嵌套包括他自己在内的所有列表类型的数据集合,如:元组2=(元组1,数据4,
数据5)
元组中数据的获取方法: 元组名[索引编号]
字典,python基本数据结构之一,使用这样的形式表示:字典1={键1:值1,键2:值2,键3:值3} 字典可以嵌套包括他自己在内的所有列表类型的数据集合
字典中数据的获取方法:字典名[键名] 或者 字典名[索引编号]
格式化字符串:字符串中的%s会被后面的对象替换掉,例如:
Hello,%s‘ % PuLee‘{python安卓app数据抓取}.
最后返回的结果是:
Hello,PuLee
注意两个字符串之间的那个%号不要漏掉了!{python安卓app数据抓取}.
2.图书价格查询器的功能分析
第一步:调用条形码扫描程序,扫描书的条形码,然后从条形码中获得书籍的ISBN编号
第二步:构造查询书籍价格的Url地址,使用豆瓣的图书搜索功能
第三部:打开浏览器,传入构造好的Url地址,返回查找的结果
3.图书价格查询器的设计实现
实现代码如下:
#导入Android的API模块
import android
#获得操作对象
droid = android.Android()
#运行扫描程序,返回一个元组
code = droid.scanBarcode()
#从扫描程序返回的元组中取得isbn编号
isbn = code[1]['extras']['SCAN_RESULT']
#构造查询书籍的Url
url = % isbn #打开浏览器,传入构造好的Url,返回查找结果
droid.startActivity(android.intent.action.VIEW‘,url)
最后的返回的查询结果:
第三节 在电脑上编写程序在手机上运行
前言
最手机上写脚本是一件每场辛苦的事情,虽然SL4A人性化的为我们提供了API快速插入功能,并且优美的Python为我们省去了输入分号和括号之苦,但是没有智能感知,没有关键字补全,狭小的按键,输入符号的困难,还是让我没有勇气去在手机上写超过50行的程序.改为在电脑上编写代码,再复制到手机上运行!那么,如何快速的将PC上编写的代码发送到手机上呢?
1. 一些传统的方法
1.1 数据线
这个就不用我多说了吧,应该都会的,但是随身带数据线是件很麻烦的事情,所以应该再找些其他方法!
1.2 wifi
和数据线原理差不多,很多的android的PC客户端都已经支持通过wifi连接手机了,比如豌豆荚,但是不是哪里都有wifi的.{python安卓app数据抓取}.
1.3使用具有网络同步功能的笔记管理软件
通过笔记管理软件,比如evernote,盛大麦库(使用此链接注册,可以将500M控件升级为1G,作为邀请人,我的空间也会增长200M,呵呵,双赢啊!)
在pc端编写好脚本,上传,然后再在手机上下载下来,粘帖到SL4A中.
篇二:《用Python爬虫抓站的一些技巧》
用 python 爬虫抓站的一些技巧总结 收藏人: | 2013-03-05 | 阅: 转: | 分享学用 python 也有 3 个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本, 写过在 discuz 论坛中自动登录自动发贴的脚本,写过自动收邮件的脚本,写过简单的验证码 识别的脚本,本来想写 google music 的抓取脚本的,结果有了强大的 gmbox,也就不用写 了。 这些脚本有一个共性,都是和 web 相关的,总要用到获取链接的一些方法,再加上 simplecd 这个半爬虫半网站的项目,累积不少爬虫抓站的经验,在此总结一下,那么以后做东西也就不 用重复劳动了。1.最基本的抓站import urllib2 content = urllib2.urlopen('2.使用代理服务器这在某些情况下比较有用,比如 IP 被封了,或者比如 IP 访问的次数受到限制等等。import urllib2 proxy_support = urllib2.ProxyHandler({'http':'opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler) urllib2.install_opener(opener) content = urllib2.urlopen('3.需要登录的情况登录的情况比较麻烦我把问题拆分一下:3.1 cookie 的处理import urllib2, cookielib cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar()) opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler) urllib2.install_opener(opener) content = urllib2.urlopen('是的没错,如果想同时用代理和 cookie,那就加入 proxy_support 然后 operner 改为opener = urllib2.build_opener(proxy_support, cookie_support, urllib2.HTTPHandler)3.2 表单的处理
登录必要填表,表单怎么填?首先利用工具截取所要填表的内容。 比如我一般用 firefox+httpfox 插件来看看自己到底发送了些什么包 这个我就举个例子好了,以 verycd 为例,先找到自己发的 POST 请求,以及 POST 表单项:可以看到 verycd 的话需要填 username,password,continueURI,fk,login_submit 这几项, 其中 fk 是随机生成的(其实不太随机,看上去像是把 epoch 时间经过简单的编码生成的), 需要从网页获取,也就是说得先访问一次网页,用正则表达式等工具截取返回数据中的 fk 项。 continueURI 顾名思义可以随便写, login_submit 是固定的,这从源码可以看出。还有 username,password 那就很显然了。 好的,有了要填写的数据,我们就要生成 postdataimport urllib postdata=urllib.urlencode({ 'username':'XXXXX', 'password':'XXXXX', 'continueURI':'/', 'fk':fk, 'login_submit':'登录' })然后生成 http 请求,再发送请求:req = urllib2.Request( url = 'data = postdata ) result = urllib2.urlopen(req).read()3.3 伪装成浏览器访问某些网站反感爬虫的到访,于是对爬虫一律拒绝请求。这时候我们需要伪装成浏览器,这可以 通过修改 http 包中的 header 来实现:headers = { 'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6' } req = urllib2.Request( url = 'data = postdata, headers = headers
)3.4 反”反盗链”某些站点有所谓的反盗链设置,其实说穿了很简单,就是检查你发送请求的 header 里面, referer 站点是不是他自己,所以我们只需要像 3.3 一样,把 headers 的 referer 改成该网站 即可,以黑幕著称地 cnbeta 为例:headers = { 'Referer':'/articles' }headers 是一个 dict 数据结构,你可以放入任何想要的 header,来做一些伪装。例如,有些 自 作 聪 明 的 网 站 总 喜 欢 窥 人 隐 私 , 别 人 通 过 代 理 访 问 , 他 偏 偏 要 读 取 header 中 的 X-Forwarded-For 来看看人家的真实 IP,没话说,那就直接把 X-Forwarde-For 改了吧,可 以改成随便什么好玩的东东来欺负欺负他,呵呵。3.5 终极绝招有时候即使做了 3.1-3.4 ,访问还是会被据,那么没办法,老老实实把 httpfox 中看到的 headers 全都写上,那一般也就行了。 再不行,那就只能用终极绝招了,selenium 直接控制 浏览器来进行访问,只要浏览器可以做到的,那么它也可以做到。类似的还有 pamie,watir, 等等等等。4.多线程并发抓取单线程太慢的话,就需要多线程了,这里给个简单的线程池模板 这个程序只是简单地打印了 1-10,但是可以看出是并发地。from threading import Thread from Queue import Queue from time import sleep#q 是任务队列 #NUM 是并发线程总数 #JOBS 是有多少任务q = Queue() NUM = 2 JOBS = 10#具体的处理函数,负责处理单个任务def do_somthing_using(arguments): print arguments#这个是工作进程,负责不断从队列取数据并处理def working(): while True: arguments = q.get() do_somthing_using(arguments){python安卓app数据抓取}.
sleep(1) q.task_done()#fork NUM 个线程等待队列for i in range(NUM): t = Thread(target=working) t.setDaemon(True) t.start()#把 JOBS 排入队列for i in range(JOBS): q.put(i)#等待所有 JOBS 完成q.join()5.验证码的处理碰到验证码咋办?这里分两种情况处理: google 那种验证码,凉拌 简单的验证码:字符个数有限,只使用了简单的平移或旋转加噪音而没有扭曲的, 这种还是有可能可以处理的,一般思路是旋转的转回来,噪音去掉,然后划分单 个字符,划分好了以后再通过特征提取的方法(例如 PCA)降维并生成特征库,然 后把验证码和特征库进行比较。这个比较复杂,一篇博文是说不完的,这里就不 展开了,具体做法请弄本相关教科书好好研究一下。 事实上有些验证码还是很弱的,这里就不点名了,反正我通过 2 的方法提取过准 确度非常高的验证码,所以 2 事实上是可行的。6 gzip/deflate 支持现在的网页普遍支持 gzip 压缩,这往往可以解决大量传输时间,以 VeryCD 的主页为例,未 压缩版本 247K,压缩了以后 45K,为原来的 1/5。这就意味着抓取速度会快 5 倍。 然而 python 的 urllib/urllib2 默认都不支持压缩, 要返回压缩格式, 必须在 request 的 header 里 面 写 明 ’accept-encoding’ , 然 后 读 取 response 后 更 要 检 查 header 查 看 是 否 有’content-encoding’一项来判断是否需要解码, 很繁琐琐碎。 如何让 urllib2 自动支持 gzip, defalte 呢? 其实可以继承 BaseHanlder 类,然后 build_opener 的方式来处理:import urllib2 from gzip import GzipFile from StringIO import StringIO class ContentEncodingProcessor(urllib2.BaseHandler): """A handler to add gzip capabilities to urllib2 requests """# add headers to requestsdef http_request(self, req):
req.add_header("Accept-Encoding", "gzip, deflate") return req# decodedef http_response(self, req, resp): old_resp = resp# gzipif resp.headers.get("content-encoding") == "gzip": gz = GzipFile( fileobj=StringIO(resp.read()), mode="r" ) resp = urllib2.addinfourl(gz, old_resp.headers, old_resp.url, old_resp.code) resp.msg = old_resp.msg# deflateif resp.headers.get("content-encoding") == "deflate": gz = StringIO( deflate(resp.read()) ) resp = urllib2.addinfourl(gz, old_resp.headers, old_resp.url, old_resp.code)# 'classto add info() andresp.msg = old_resp.msg return resp# deflate supportimport zlib def deflate(data): try: except zlib.error: return zlib.decompress(data)# zlib only provides the zlib compress format, not the deflate format; # so on top of all there's this workaround:return zlib.decompress(data, -zlib.MAX_WBITS)然后就简单了,encoding_support = ContentEncodingProcessor opener = urllib2.build_opener( encoding_support, urllib2.HTTPHandler )#直接用 opener 打开网页,如果服务器支持 gzip/defalte 则自动解压缩content = opener.open(url).read()7. 更方便地多线程总结一文的确提及了一个简单的多线程模板,但是那个东东真正应用到程序里面去只会让程序 变得支离破碎,不堪入目。在怎么更方便地进行多线程方面我也动了一番脑筋。先想想怎么进 行多线程调用最方便呢?
篇三:《使用Python分析社交网络数据》
Archive
Album{python安卓app数据抓取}.
使用Python分析社交网络数据
AUG,03 2014
Python简介
数据抓取
o 一、直接抓取数据 FrankWang
o 二、模拟浏览器抓取数据
o 三、基于API接口抓取数据 数据预处理
可视化
数据分析
o 节点属性
o 网络属性
o 传播属性
扩散深度
扩散速度
空间分布
结语
参考文献
在线社交网站为人们提供了一个构建社会关系网络和互动的平台。每一个
人和组织都可以通过社交网站互动、获取信息并发出自己的声音,因而吸引了众多的使用者。作为一个复杂的社会系统,在线社交网站真实地记录了社会网络的增长以及人类传播行为演化。通过抓取并分析在线社交网站的数据,研究者可以迅速地把握人类社交网络行为背后所隐藏的规律、机制乃至一般性的法则。
然而在线社交网络数据的获取方法有别于线下社会数据的获取(如普查、社会调查、实验、内容分析等)、数据的规模往往非常大(称之为“大数据”并不为过)、跨越的时间范围也相对较长(与社会调查中的横截面数据相比),常规的数据分析方法并不完全适用。例如传统的社会调查的数据往往样本量有限,而在线社交网络中的样本量可以达到千万甚至更多。因而,研究者迫切得需要寻找新的数据
获取、预处理和分析的方法。本章的内容具体包括数据的抓取、数据预处理、数据可视化和数据分析部分。 Python简介
本章将简要介绍使用python分析社交网络数据的方法。Python是一种广泛使用的高级编程语言,具有可读性强、编写容易、类库丰富等特点。作为一种“胶水语言”,它可以将使用其他语言编写的各种模块(尤其是C/C++)轻松地联结在一起。自从1991年推出第一个正式版本,因其使用方便,Python社区迅速发展,越来越多的程序员开始使用Python编写程序并贡献了各种功能强大的类库。它被TIOBE编程语言排行榜评为“2010年度编程语言”。
篇四:《python完成网页抓取的工作》
python完成网页抓取的工作
python 语言是自省的,就是说他的语言机制能保证他可以充分的自己描述自己,下面我就借助自省,用程序自身的说明来解释程序的逻辑结构,版本历史,以及设计时的想法.
# -*- encoding:UTF-8 -*-
'''
This is geturl.
Wirtten by yuzebin : yuzebin AT gmail.com
Important:this script is running in cygwin or linux,if you run at windows you need the curl and wget for windows .
'''
class='''
CGetPage is charge of to get a url , it have three methods to get a page : urllib,curl and wget;
CParsePage is charge of to parse the page , and return the match; CGetMatch is the forcad class to wrap the CGetPage and CParsePage. '''
history='''
2006.07.10 version 0.0.0.9 :
Publish this code to internet ,
2006.06.27 version 0.0.0.7 :
refrectoring class CParsePage : return re.match only
refrectoring class CGetCount : rename to CGetMatch
2006.06.26 version 0.0.0.3 :
modify class CParsePage , return re.match
2006.06.22 version 0.0.0.2 :
add class CGetCount
this version is the first workable version.
add cnsky.
2006.06.21 initial version 0.0.0.1 :
add class CGetPage and CParsePage
cannot work
'''
import string,re,os,fnmatch,sys,copy,gzip,time,datetime,urllib
from types import *
isDebugMode = False
转载请注明:中小学优秀作文大全_作文模板_写作指导_范文大全 » python安卓app数据抓取 python抓取网页数据