这两天看完了Course上面的:

使用 Python 访问网络数据

https://www.coursera.org/learn/python-network-data/

写了一些作业,完成了一些作业。做些学习笔记以做备忘。

1.正则表达式 --- 虽然后面的课程没有怎么用到这个知识点,但是这个技能还是蛮好的。

附上课程中列出来的主要正则表达式的用法:

Python Regular Expression Quick Guide
^ Matches the beginning of a line
$ Matches the end of the line
. Matches any character
\s Matches whitespace
\S Matches any non-whitespace character
* Repeats a character zero or more times
*? Repeats a character zero or more times
(non-greedy)
+ Repeats a character one or more times
+? Repeats a character one or more times
(non-greedy)
[aeiou] Matches a single character in the listed set
[^XYZ] Matches a single character not in the listed set
[a-z0-] The set of characters can include a range
( Indicates where string extraction is to start
) Indicates where string extraction is to end

特别的以前没注意:From([0-9a-z]) 其实是取得符合整个规则的语句中()的部分。

并且 (.)并不表示任意字符而是只是.的意思。

附上作业编程:

import re

def sumText(name):
handle = open(name, 'r')
sum =
for line in handle:
nums = re.findall('[0-9]+', line)
if len(nums) >=:
for num in nums:
sum += int(num)
return sum filedir = raw_input("imput fileName :")
sum1 = sumText(filedir)
print sum1

2.使用python建立socket链接

介绍了下socket,一个用于和应用通讯的东西,每个网络应用都有对应的端口号,通过协议+主机名+端口就可以找到这个应用进行通讯了。

展示了使用telnet来获取http服务的方式。

telnet www.cnblogs.com
GET http://www.cnblogs.com/webarn/p/6398989.html HTTP/1.0

不一定成功,觉得不是课程上面说的速度太慢的原因。

嗯附上自己知道比较简单的方式:

curl -XGET http://www.cnblogs.com/webarn/p/6398989.html

或者 使用python直接建立url链接,代码如下:

import socket

mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('data.pr4e.org', ))
mysock.send('GET http://data.pr4e.org/intro-short.txt HTTP/1.0\n\n') while True:
data = mysock.recv()
if ( len(data) < ) :
break
print data; mysock.close()

再或者,使用浏览器的开发者工具也是一目了然的。

3.理解HTML并且进行解析

由于网页大部分都是html格式也就是超文本标记语言,是大部分网页展示的时候使用的语言,所以告诉了我们python里面也是有解析html 的包的:BeautifulSoup。

这个项目的链接如下:

https://www.crummy.com/software/BeautifulSoup/

使用详情可以查看它。

然后就是代码怎么使用了,还是自己作业的小小demo:

import urllib
from BeautifulSoup import * url = raw_input('Enter - ')
html = urllib.urlopen(url).read() soup = BeautifulSoup(html) sum =
trs = soup('tr')
for tr in trs:
if tr.span is not None:
num = int(tr.span.contents[])
sum += num
print sum

4.webService 和xml

介绍了xml,可扩展标记语言。主要用来传输和存储数据。可读性会比较强。很多webservice的通讯协议都是用xml来设计的。

其中有一个schme的概念,比如我们以前会写一些xsd文件来表示xml数据结构中的约束,比如字段是否可输还是必输,比如字段类型,这是一个约束,也是类似于协议的东西。

schema也会有很多的标准的。

xml解析用的是python内部的包:

xml.etree.ElementTree,将xml作为一个树状结构来解析了,要获取字段值要从根节点来数。

代码 如下:

import urllib
import xml.etree.ElementTree as ET url = raw_input("Enter location:")
print 'Retrieving', url
uh = urllib.urlopen(url)
data = uh.read()
print '\nRetrieved ', len(data), ' characters'
tree = ET.fromstring(data) comments = tree.findall('.//comment')
sum =
count = len(comments)
print 'Count:', count
for comment in comments:
sum += int(comment.find('count').text)
print 'Sum:', sum

5.json,api

这节谈到了SOA,面向对象服务,大型的系统都会用到这个,感觉上是各个系统中都有一层中间层用于通讯,通讯所用的数据协议,格式都是统一的,这样可以互相通讯。当然里面还有服务发现等问题需要考虑。但是有了SOA的架构之后,各个不同的系统都可以通讯了。

api 课程中举了google map的api和twitter的api,各个应用可能都提供了api来进行调用,application program interface 就是和一个系统通讯的接口。api的格式比较简单,使用REST风格的调用。RESTFul风格感觉可以再写一篇文章了,可以看看他们直接的关系,但是我看到的api大都是网址+参数。就是这种 http://www.xxxx.com?para1=11&&param2=11这种,应该理解下来就是和前面说的协议+ 主机+ 端口+ 参数差不多了。

json介绍:json是一个简介的数据交换协议,只有一个版本,永远不会修改了,和xml比起来轻量很多,只有两个数据格式map,list。其他可以参看(json.org)(写这段chrome崩溃了3次,我也崩溃了。。。)然后就是loads才是解析string的,load是解析file的。

代码附上:

import json
import urllib url = raw_input('Enter location:')
print 'Retrieving', url
uh = urllib.urlopen(url)
data = uh.read()
print 'Retrieved', len(data)
info = json.loads(data)
print 'Count:', len(info['comments'])
sum =
for comment in info['comments']:
sum += int(comment['count'])
print 'Sum: ', sum

api获取然后解析json的:

import urllib
import json serviceurl = 'http://python-data.dr-chuck.net/geojson?' while True:
address = raw_input('Enter location:') if len(address) < :
break url = serviceurl + urllib.urlencode({'sensor': 'false', 'address': address})
print 'Retrieving ', url
uh = urllib.urlopen(url)
data = uh.read()
print 'Retrieved',len(data),'characters' try: js = json.loads(str(data))
except: js = None
if 'status' not in js or js['status'] != 'OK':
print '==== Failure To Retrieve ===='
print data
continue print json.dumps(js, indent=) print 'place_id:', js['results'][]['place_id']

使用python访问网络上的数据的更多相关文章

  1. Java 网络编程(三) 创建和使用URL访问网络上的资源

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951877.html 创建和使用URL访问网络上的资源 URL(Uniform Reso ...

  2. Snail—iOS网络学习之得到网络上的数据

    在开发项目project中,尤其是手机APP,一般都是先把界面给搭建出来.然后再从网上down数据 来填充 那么网上的数据是怎么得来的呢,网络上的数据无非就经常使用的两种JSON和XML 如今 大部分 ...

  3. 使用异步任务加载网络上json数据并加载到ListView中

    Android中使用网络访问来加载网上的内容,并将其解析出来加载到控件中,是一种很常见的操作.但是Android的UI线程(也就是主线程)中是不允许进行耗时操作的,因为耗时操作会阻塞主线程,影响用户体 ...

  4. widows10 安装1803 版本后不能访问网络上的机器解决方法

    安装Windows10 1803 版本后,发现网络上的机器好多不见了. 使用 ping  可以ping 通,但是访问网络共享提示下面错误. 这个原因是1803 中没有安装 SMB1.0 协议.因为 S ...

  5. 使用应用程序(Java/Python)访问MaxCompute Lightning进行数据开发

    MaxCompute Lightning是MaxCompute产品的交互式查询服务,支持以PostgreSQL协议及语法连接访问Maxcompute项目,让您使用熟悉的工具以标准 SQL查询分析Max ...

  6. 利用libpcap分析网络上的数据包(入门级)

    本文可任意转载,但请保留作者及出处作者:rainfish出处:http://blog.csdn.net/bat603/经过几天的突击,终于明白了怎样在局域网内抓包,这可是我多年来的梦想.首先说说我的学 ...

  7. mac 下使用wireshark监听网络上的数据

    分三个步骤:    1.wireshark安装        wireshark运行需要mac上安装X11,mac 10.8的系统上默认是没有X11的.先去http://xquartz.macosfo ...

  8. python 解析Hdfs上的数据文件

    python想直接读取hadoop上的文件内容,一番操作,头发掉了几根,也没能解析出来parquet文件类型的文件. 本博文简单讲解一下TEXTFILE文件格式的解析: 需要安装模块hdfs from ...

  9. python数据可视化-matplotlib入门(7)-从网络加载数据及数据可视化的小总结

    除了从文件加载数据,另一个数据源是互联网,互联网每天产生各种不同的数据,可以用各种各样的方式从互联网加载数据. 一.了解 Web API Web 应用编程接口(API)自动请求网站的特定信息,再对这些 ...

随机推荐

  1. asp.net 下载视频 保存视屏

    第一张图片为html,第一站图片为js上传视频并播放,限定大小,第三张图片是将视频保存到以字节流的方式保存到数据中,或者是将视频保存到项目中 String filename=this.Filevide ...

  2. SQLServer导入导出命令报错

    错误描述: SQL Server阻止了对组件‘xp_cmdshell’的过程‘sys.xp_cmdshell’的访问.因为此组件已作为此服务嚣安全配置的一部分而被关闭. 系统管理员可以通过使用sp_c ...

  3. 设计模式之装饰者模式-java实例

    设计模式之装饰者模式 需求场景 我们有了别人提供的产品,但是别人提供的产品对我们来说还不够完善,我们需要对这个产品的功能进行补强,此时可以考虑使用装饰者模式. 我们已经有了产品,而且这个产品的功能非常 ...

  4. stm32-arduino-f103

    希望给工作中偶尔要用的一些辅助板卡(例如运行信息现场记录)找一个快速开发的手段,Arduino作为流行的开源嵌入硬件框架,组件丰富,资料众多,所以想以Arduino作为平台.但是Arduino板子基本 ...

  5. 面试简单整理之mybatis

    125.mybatis 中 #{}和 ${}的区别是什么? 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解 ...

  6. 杨其菊201771010134《面向对象程序设计(java)》第十四周学习总结

    第十四周学习总结 第一部分:理论知识 理论知识:本周学习Swing用户界面 内容:Swing与模型-视图-控制器设计模式:布局管理概述:文本输入 :选择组件:菜单:复杂的布局管理:对话框: 第二部分: ...

  7. Oracle 开机自动启动设置

    步骤: 1:查看ORACLE_HOME是否设置 $ echo $ORACLE_HOME /u01/app/oracle/product//dbhome_1 2:执行dbstart 数据库自带启动脚本 ...

  8. Numpy 数据类型

    numpy支持的数据类型比Python内置的类型多很多,基本上可以和C语言的数据类型对应上, 其中部分类型对应为Python内置的类型.下表列举了常用的Numpy基本类型. 名称 描述 bool_ 布 ...

  9. vue.js中axios的封装

    基于前文所述,axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它有很多优秀的特性,例如拦截请求和响应.取消请求.转换json.客户端防御XSRF等. 如果还对a ...

  10. 数据流图——从软考真题中学画数据流图DFD

    文章目录 题目 画顶层图 画0层图 解题技巧 题目 建议将题目复制到word后与此文分屏查看.后面需要多次查看题目. 某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩, ...