在Python中,如何把新浪微博接口返回的时间格式转换成我们常用的格式啊?
lib.response: addbase; addclosehook; add; add;什么常用格式?Last-modified: Fri, 26 Jun 2009 10:16:10 GMT
pythonparser模块 pythonserial模块
pythonparser模块 pythonserial模块
按一般简单的说:
import time
time.strftime('%Y-%m-%d %H:%M:%S',time.strptime(s,'%a %b %d %H:%M:%S %z %Y'))
Python解析库lxml与xpath用法总结
本文主要围绕以xpath和lxml库进行展开:
一、xpath 概念、xpath、xpath语法、xpath轴、xpath运算符
二、lxml的安装、lxml的使用、lxml案例
一、xpath
1.xpath概念
XPath 是一门在 XML 文档中查找信息的语言。XPath 使用路径表达式在 XML 文档中进行导航 。XPath 包含一个标准函数库 。XPath 是 XSLT 中的主要元素 。XPath 是一个 W3C 标准 。
2.xpath
xpath有七种类型的:元素、属性、文本、命名空间、处理指令、注释以及文档(根)。
3.xpath语法
xpath语法在W3c网站上有详细的介绍,这里截取部分知识,供大家学习。
XPath 使用路径表达式在 XML 文档中选取。是通过沿着路径或者 step 来选取的。下面列出了最有用的路径表达式:
在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:
谓语用来查找某个特定的或者包含某个指定的值的。
谓语被嵌在方保存为danmu.py括号中。
在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:
XPath 通配符可用来选取未知的 XML 元素。
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
通过在路径表达式中使用"|"运算符,您可以选取若干个路径。
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
4.xpath 轴
轴可定义相对于当前的集。
5.xpath运算符
下面列出了可用在 XPath 表达式中的运算符:
二、lxml
lxml 是一个xpath格式解析模块,安装很方便,直接pip install lxml 或者easy_install lxml即可。
2.lxml 使用
lxml提供了两种解析网页的方式,一种是你解析自己写的离线网页时,另一种 则是解析线上网页。
导入包:
1.解析离线网页:
2.解析在线网页:
然后我们可以,比方说,你要获取a标签内的文本和它的属性href所对应的值,有两种方法,
1.表达式内获取
2.表达式外获取
这样就完成了获取,怎么样,是不是很简单了,哈哈哈。
下面再来lxml的解析规则:
3.lxml案例
为了偷懒,我决定还是采用lib那篇文章的代码,哈哈哈,机智如我。
python的web框架哪个好
关系:父、子、兄弟、先辈、后辈。个:Django
Django是一个开源的Web应用框架,由Python写成,支持许多数据库引擎,可以让Web开发变得迅速和可扩展,并会不断的版本更新以匹配Python版本,如果是新手程序员,可以从这个框架入手。
第二个:Flask
Flask是一个轻量级的Web应用框架,使用Python编写。基于WerkzeugWSGI工具箱和JinJa2模板引擎,使用BSD授权。
Flask也被称为microframework,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而Flask保留了扩增的弹性,可以用Flask-extension加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。
第三个:Web2py
Web2py是一个用Python语言编写的免费的开源Web框架,旨在敏捷快速的开发Web应用,具有快速、可扩展、安全以及可移植的数据库驱动的应用,遵循LGPLv3开源协议。
Web2py提供一站式的解决方案,整个开发过程都可以在浏览器上进行,提供了Web版的在线开发,HTML模板编写,静态文件的上传,数据库的编写的功能。其他的还有日志功能,以及一个自动化的admin接口。
第四个:Tornado
Tornado即是一个Web
server,同时又是一个类web.py的micro-framework,作为框架的Tornado的思想主要来源于web.PY,大家在web.PY的网站首页也可以看到Tornado的大佬Bret
Taylor的这么一段话:“[web.py inspired the] Web framework we use at FriendFeed [and] the
webapp framework that ships with App Engine…”,因为这层关系,后面不再单独讨论Tornado。
第五个:CherryPy
CherryPy是一个用于Python的、简单而非常有用的Web框架,其主要作用是以尽可能少的作将Web与Python代码连接,其功能包好了,xpath的内容就这么多了。接下来我们要介绍一个神器lxml,他的速度很快,曾经一直是我使用beautifulsoup时最钟爱的解析器,没有之一,因为他的速度的确比其他的html.parser 和html5lib快了许多。括内置的分析功能、灵活的插件系统以及一次运行多个HTTP的功能,可运行在版本的Python、Jython、android上。
lib.parse在python2.7中怎么用
版的python3.3.0已经发布了。相较于python3.0,3.2的改动并不大。但网上的大量的教程等大都以2.x版本为基础。这为想要从python3.0学起的菜鸟带来了不少的困难。 作为一只菜鸟,最近想学习一下python中lib模块的使用方法。从网上找的最简单的实例:把google 首页的html抓取下来并显示在控制台上 代码:
[python] view plain copy
import lib
print 7、character :字符 lib.open('').read()
首先,使用过python3.0的朋友都知道,print已经变成含树了,需要括号。但这不是主要问题。问题是控制台显示错误,说lib模块中没有open方法。 奇怪了,网上的教程能错了?又尝试(lib),发现什么方法都没有,只提供了package contents,里面有5个名字。 [python] view plain copy
import lib
(lib) 3.0版本中已经将lib2、parse、和robotparser并入了lib中,并且修改lib模块,其中包含5个子模块,即是()中看到的那五个名字。
为了今后使用方便,在此将每个包中包含的方法列举如下:
lib.error: ContentTooShortError; HTTPError; URLError
lib.parse: parsauthor='twocu',eqs; parseqsl; quote; quotefrombytes; quote_plus; unquote unquoteplus; unquoteto_bytes; defrag; encode; join; parse; split; unparse; unsplit
lib.request: AbstractBasicAuthHandler; AbstractDigestAuthHandler; BaseHandler; CatheFTPHandler; FTPHandler; FancyURLopener; FileHandler; HTTPBasicAuthHandler; HTTPCookieProcessor; HTTPDefaultErrorHandler; HTTPDigestAuthHandler; HTTPErrorProcessorl; HTTPHandler; HTTPPasswordMgr; HTTPPasswordMgrWithDefaultRealm; HTTPRedirectHandler; HTTPSHandler;OpenerDirector;ProxyBasicAuthHandler ProxyDigestAuthHandler; ProxyHandler; Request; URLopener; UnknowHandler; buildopener; getproxies; installopener; pathname2; 2pathname; cleanup;open; retri;
lib.robotparser: RobotFileParser
---------------------------------------------------------------------------------------------------------
在2.X版本下,打开HTML文档的实例:
[python] view plain copy
import lib webURL = ""
localURL = "index.html"
#通过URL打开远程页面
u = lib.open(webURL)
buffer = u.read()
print u.()
print "从%s读取了%d 字节数据. " % (u.get(),len(buffer) )
#通过URL打开本地页面
u = lib.open(localURL)
buffer = u.read()
print u.()
print "从%s读取了%d 字节数据. " % (u.get(),len(buffer) )
运行结果如下:
[html] view plain copy
Date: Fri, 26 Jun 2009 10:22:11 GMT : Apache/2.2.9 (Debian) DAV/2 SVN/1.5.1 mod_ssl/2.2.9 OpenSSL/0.9.8g mod_wsgi/2.3 Python/2.5.2
Last-Modified: Thu, 25 Jun 2009 09:44:54 GMT
ETag: "105800d-46e7-46d236f7180"
Content-Length: 18151
Connection: close
Content-Type: text/html
从:// 字节数据.
Content-Type: text/html
Content-Length: 865
从index.html读取了865 字节数据.
若要通过lib模块中的open( [,data])函数打开一个HTML文档,必须提供该文档的URL地址,包括文件名。函数open不仅可以打开位于远程web上的文件,而 且可以打开一个本地文件,并返回一个类似文件的对象,我们可以通过该对象从HTML文档中读出数据。
一旦打开了HTML文档,我们就可以像使用常规文件一样使用read([nbytes])、readline()和readlines()函数来对文件进行读作。若要读取整个HTML文档的内容的话,您可以使用read()函数,该函数将文件内容作为字符串返回。
打开一个地址之后,您可以使用get()函数取得被获取网页的真正的URL。这是很有用的,因为open(或使用的opener对象)也许会伴随一个重定向。获取的网页URL也许和要求的网页URL不一样。
另一个常用的函数是位于从open返回的类文件对象中的()函数,这个函数可以返回URL位置有关的元数据,比如内容长度、内容类型,等等。下面通过一个较为详细的例子来对这些函数进行说明。
--------------------------------------------------------------------------------------------------------------------------
在2.X版本下,parse使用实例:
[python] view plain copy
import parse URLscheme = ""
URLlocation = ""
URLpath = "lib/module-parse.html"
modList = ("lib", "lib2",
"lib", "cgilib")
#将地址解析成组件
print "用Google搜索python时地址栏中URL的解析结果"
parsedTuple = parse.parse(
"?
hl=en&q=python&btnG=Google+Search")
print parsedTuple
#将组件反解析成URL
print "反解析python文档页面的URL"
unparsedURL = parse.unparse(
(URLscheme, URLlocation, URLpath, '', '', ''))
print "t" + unparsedURL
#将路径和新文件组成一个新的URL
print " 利用拼接方式添加更多python文档页面的URL"
for mod in modList:
newURL = parse.join(unparsedURL,
"module-%s.html" % (mod))
print "t" + newURL
#通过为路径添加一个子路径来组成一个新的URL
print " 通过拼接子路径来生成Python文档页面的URL"
newURL = parse.join(unparsedURL,
"module-lib2/request-objects.html")
print "t" + newURL
运行结果如下:
[python] view plain copy
用Google搜索python时地址栏中URL的解析结果 ('', '', '/search', '',
'hl=en&q=python&btnG=Google+Search', '')
反解析python文档页面的URL
利用拼接方式添加更多python文档页面的URL
parser = optparse.OptionParser('usage %prog –H -p ')
│ ├── __init__.py%prog是optparse定义的格式化字符串符号,表示本程序的文件名。比如你的文件为demo.py。
sys.argv.append('--')usage = "usage: %prog [options] arg1 arg2"
parser = OptionParser(usage=usage)
那么你运行demo.py打印出来的帮助信息就是
usage: demo.py [options] arg1 arg2
python中argument3是什么意思
├── docs01.交互式环境与print输出
version=VERSION,1、print:打印/输出
2、coding:编码
3、syntax:语法
4、error:错误
5、invalid:无效
6、identifier:名称/标识符
02.字符串的作
1、user:用户
2、name:姓名/名称
3、attribute:字段/属性
4、value:值
5、key:键
03.重复/转换/替换/原始字符串
1、upper:上面
2、lower:下面
3、capitalize:用大写字母写或印刷
4、title:标题
5、replace:替换
6、old:旧的
7、new:新的
8、count:计数
9、swap:互换
10、case:情形
11、path:路径
12、new:新的新建
13、project:项目
14、test:测试
15、file:文件
16、data:数据
如何发布一个Python命令行工具
14本文的目的也是非常简单:
写一个Python命令行工具,并且发布到PIP上面.并且在这个过程中给出我自己的一些思考.
如何分解这个发布任务?
只需要进行如下的两个步骤便可以:
1.写好一个Python命令行工具.
2.发布它.
当然,这样不够细致.再细分一下.
1.写好一个Python命令行工具
1.1.命令行的特点,以及Python的如何编写命令行
1.2.如何组织代码结构.
2.发布
2.1.注册pypi账户
2.2.注册在账户下面注册Python包
2.3.上传打包好的Python命令行工具.
3.完善代码
1.写好一个Python命令行工具
写好一个命令行工具首先要知道命令行工具是什么?
在我看来,命令行工具就是一种完成某种类型的任务的终端程序.
也就是基本上没有什么用户界面的程序.
由于基本上没有什么用户界面,所以导致单个命令行的交互能力及其低下.但这种低下的交互性对于一些固定工作而言,简直就是最灵活的工具.只需要输入一些命令便可以完成某种类型的工作.实在是方便的很.
所以,某种程度上,终端程序低交互的缺点反而成了优点.
1.1.Python的如何编写一个简单的命令行
对于Python和命令行交互,我们很容易想出一个比较方便的方案.
sys.argv就是这样的嘛!
我们很容易这样写代码.
1python testargv.py thisisaargv1
甚至我们也可以这样写命令行,
1python testargv.py thisisaargv1 -d -f 0
那么,这样写的后果就是,不方便解析出(不是不能,是不方便) -d -f 0 以及 thisisaargv1.
不信的话,你解析一个下面场景的命令行试试,
12
# 用户可能这样输入
danmu.fm -q 1 -v 2
danmu.fm -q 1 -v 2
# 当然,肯定还有漏写啦,等等,你得需要转类型,增加各种blablabla的描述吧,添加默认的参数值吧.
于是Python就提供了一个非常好用的模块可以使用.叫做argparse.
上面的描述就变成了这个样子
Python
12
78
0
11
12
13
15
16
17
18
19
import argparse
APP_DESC="""
这就是描述
"""
print(APP_DESC)
if len(sys.argv) == 1:
parser = argparse.ArgumentParser()
parser.add_argument('-q','--quality',type=int,default=0,="download video quality : 1 for the standard-definition; 3 for the super-definition")
parser.add_argument('-v','--verbose', default=0,="print more debuging rmation")
parser.add_argument('-s','--store',="保存流媒体文件到指定位置")
parser.add_argument('-c','--config',default=0,="读取~/.danmu.fm配置,请~/.danmu.fm指定数据库")
parser.add_argument('',metar='URL',nargs='+', ="zhubo page URL (/)")
args = parser.parse_args()
# 获取对应参数只需要args.quality,args.之类.
= (args.)[0]
print()
#其他执行逻辑
这样就可以执行命令
1python danmu.py -q 1 -v 2
通过args就可以获取参数,然后进行终端程序的参数初始化.
可是这和我们的要求还是不同嘛,我们不想多写Python XXX,我们想直接XXX.就像这样.
1danmu.fm -q 1 -v 2
不急,下面就是了.
1.2.如何组织代码结构.
于是,现在就要开始组织代码结构了.
我们在最终的代码目录大概是这样的.
12
78
0
11
12
13
15
16
17
18
19
20
21
22
23
danmu.fm
├── README.md
├── danmufm
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── douyu_client.py
│ │ └── douyu_danmu_client.py
│ ├── danmu.py
│ ├── misc
│ │ ├── __init__.py
│ │ ├── color_printer.py
│ │ ├── downloaders.py
│ │ └── player.py
│ └── model
│ ├── __init__.py
│ └── douyu_msg.py
├── setup.cfg
├── setup.py
├── sh.py
└── tests
这就是我上次写的danmu.fm的代码目录.
聪明的你这时候你注意到了:
主要的程序不是放在根目录下面,而是放在第二目录danmufm下面.
2.setup.cfg 是什么东西
3.setup.py 是什么东西
对于上面几点,我们分别进行解释
1.2.1 为什么主要程序在第二目录下
为了把主要的程序分离出来,放在第二目录下面,这样的待会打包以后多出很多文件夹就不会对源码造成干扰.
当然,由于把程序放在了第二目录下面,所以,脚本里面的from import语句应该使用相对路径导入.
相对路径导入的的时候需要注意运行的时候使用如下命令
1python3 -m danmufm.danmu [xxxx]
1.2.2 setup.cfg
填写如下内容即可.
12
[metadata]
然后去写Markdown的Readme就好了.
1.2.3 setup.py
这个是重头戏了.
setup这个py文件就是打包配置文件.对这个程序是谁的,有什么依赖,入口是什么,等等等等的配置.
12
78
0
11
12
13
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#-- encoding: UTF-8 --
from setuptools import setup, find_packages
"""
打包的用的setup必须引入,
"""
VERSION = '0.1.1'
setup(name='danmu.fm',
description="acopy c:. d:. tiny and art cli player of douyutv,ximalayad,anmu based on Python",
long_description='just enjoy',
classifiers=[], # Get strings from ?%3Aaction=list_classifiers
keywords='python douyu danmu danmu.fm terminal',
author_email='twocu@gmail',
='',
lnse='MIT',
packages=find_packages(),
include_package_data=True,
zip_safe=True,
install_requires=[
'requests',
],
entry_points={
'danmu.fm = danmufm.danmu:main'
]},
)有distutils这个包管理器工具,设置也非常的简单,只是,它不支持entry_points属性,由于无法使用entry_point,也就无法通过命令来跳转到指定模块运行程序,这也就意味着,工具不方便写成命令行.还是setuptools好.
上面需要注意的就是install_requires可以添加依赖.其他的你猜都可以猜出来是做什么的.自己去看代码,我就不多说了.
2.发布
所谓的发布,就是将打包好的程序的某个版本发布到某个仓库中.
2.1.注册pypi账户
到这个上面注册账号:
2.2.注册在账户下面注册Python包
进入对应项目根文件,然后执行
1python3 setup.py register
这一步程序会让你输入刚刚注册的账号和密码,然后注册该包.注册该包以后,你就有了一个小仓库.可以存放不同版本的danmu.fm.
注册的仓库是可以在这个地址看到的,
2.3.上传打包好的Python命令行工具.
这里需要借助一个小工具,twine.twine是一个更加安全方便上传打包好的代码的工具.
1pip3 install twine
接着开始打包,打包成两个版本,一个是不需要build的版本,另一个是需要build的版本(顺带吐槽下,这两个诡异的命名).
1python setup.py sdist bdist_wheel
于是剩下来的就显而易见了,上传build完毕的程序到仓库中.
1twine upload dist/danmu.fm-0.1.2
于是,安装一下,测试是否成功
1pip3 install danmu.fm --upgrade
命令行的工具是这样使用的.
1danmu.fm -q 2 -v 1
3.完善
不断的完善代码,然后打包终端程序发布到仓库给别人用,这就是整个的PIP打包发布流程.
这个时候,你可能需要使用版本控制软件.
你可能需要增多的代码的测试.
用pythonform表单的问题?
下面是一个简单的例子:通过 parser.server 获取 --host 选项的值,通过 parse.boolean_switch 获取 -t 选项的值。首先,你需要使用Python的requests库来实现这个功能,它可以帮助你发送POST请求。
通过拼接子路径来生成Python文档页面的URL可以使用Python的requests库来实现对form表单信息的。首先,使用requests.t()方法发起一次HTTP POST请求,将要提交的数据作为参数传入:
如果你想使用 Python 一个 HTML 网页中的 form 表单,可以使用第三方库 BeautifulSoup 来解析 HTML 代码,然后使用 find() 或 find_all() 方法查找 form 标签,并获取其中的表单元素。
首先需要安eautifulsoup4库
pip install beautifulsoup4
示例代码如下:
from bs4 import BeautifulSoup
# 定义 HTML 代码
html = '
'# 使用 BeautifulSoup 解析 HTML 代码
soup = BeautifulSoup(html, 'html.parser')
# 查找 form 标签
form = soup.find('form')
# 获取 form 中的表单元素
inputs = form.find_all('input')
# 打印表单
建议您可以使用Python的requests库来实现,首先捕获家网店提交录入商品信息时发送的form表单请求,接着,使用requests库发起一个请求,将其中的数据过去,完成在第二家店的商品信息的上传。
您可以使用Python中的requests库来实现这个功能。首先,您需要在家网店中手动录入商品信息并提交表单,然后使用Python的requests库捕获这个POST请求的数据。
如何用Python抓取动态页面信息
56很早之前,学习Python web编程的时候,就涉及一个Python的lib。可以用lib.open("").read()可以轻松读取页面上面的静态信息。但是,随着时代的发展,也来越多的网页中更多的使用jascript、jQuery、PHP等语言动态生那么我们怎么获取这些标签和标签对应的属性值了,很简单,首先获取标签只需你这样做:成页面信息。
请问各位大神,我在pycharm中打断点调试代码时为什么会弹出另外一个parse.py窗口呢,这到底是为什么呢
因为你调用了parse模块,python所有的模块都可以查看源码,Accept-Ranges: bytes当你的调用模块的方法有误,而打印版本信息:模块本身又没有完善的错误处理机制时,它就会打开模块源码文件并跳到报错的位置。当然,这种情况你不要去修改模块的源码,而是要去你自己的代码里排查错误。
PYTHON提取主谓语
'console_scripts':[#!/usr/bin/env python
1.lxml安装# coding: utf-8
## filename: baidu_qa.py
import BeautifulSoup as beautifulsoup
context = """
"""
parser = beautifulsoup.BeautifulSoup(context)
for block in parser.findAll("para"):
remind = {}
for in block.findAll("word"):
remind[["parent"]] = dict(
cont=["cont"],
relate=["relate"],
)if remind["7"]["relate"] == "SBV":
print remind["4"]["cont"], remind["7"]["relate"]
print "____"