导航:首页 > 编程语言 > pythonfeedparse

pythonfeedparse

发布时间:2023-03-22 22:01:56

① 我的fft python中的错误问题,怎么解决

Traceback(mostrecentcalllast):File"",line26,infoofor(event,elem)inxmlit:File"C:\Python32\lib\xml\etree\ElementTree.py",line1314,in__next__self._parser.feed(data)File"C:\Python32\lib\xml\etree\ElementTree.py",line1668,infeedself._parser.Parse(data,0)UnicodeEncodeError:'utf-8'codeccan'tencodecharacter'\ud800'inposition16383:surrogatesnotallowed由于出现错误之间for循环迭代,我可以包装一个唯一的地方try块以外的for循环,这是我无法继续到下一个XML是我的一个解决方案的优先事项如下:接收,而不必引发异常的未必然,有效的Unicode字符串作为文本。收到一个有效的Unicode字符串的字符无效更换或取出。跳过的无效字符CodeGo.net,并移动到下一个。我怎么能这些解决方案中,而不必和修改ElementTree编写自己?本文地址:CodeGo.net/9075227/-------------------------------------------------------------------------------------------------------------------------1.首先,所有的东西对可能这里无关紧要。尝试仅仅通过返回的文件f=open(filename,encoding='utf-8')如果是的话,解决的法是重写默认编码错误处理程序,如在文档解释说:错误是一个可选的字符串,用于指定编码和解码的错误是如何被handled,Äìthis不能以二进制方式。经过“strict”提出一个ValueError异常,如果有一个编码错误(没有默认有作用),或者通过“忽略”忽略错误。(请注意CodeGo.net,忽略编码错误会导致数据丢失。)'代替'的标记(如“?”)插入那里的数据。写作时,“xmlcharrefreplace”(替换为相应的XML字符引用)或“backslashreplace'(用反斜杠转义序列替换)可以在已注册codecs.register_error()其他错误处理也是有效的。所以,你可以这样做:f=open(filename,encoding='utf-8',errors='replace')这符合你的第二个priority,Äîthe无效字符将被替换'?'。有没有法来满足你的首要任务,有没有法来表示“不必然,有效的Unicode字符串”.a个Unicode字符串,顾名思义,对Unicode代码点的序列,这就是Python中如何对待str类型。如果你有无效的UTF-8,并希望把它转换成一个字符串,你需要指定应该如何变成string,Äîand那是什么,errors是。你可以,或者,以二进制方式打开该文件,息事宁人为UTF-8作为bytes对象,而不是试图把它变成一个Unicodestr反对,但你可以在与工作的APIbytes对象。(我相信lxml的ElementTree能真正做到这一点,但内置一不可,但不要说)。但即使你这样做,它不会让你很远.xML代码本身将试图解释无效的UTF-8,然后它需要知道你想要做什么样的错误,而这将是很难说明它的更远了。最后一点:因为发生错误的for循环迭代之间,唯一的地方,我可以换一个try块外循环,这是我无法继续到下一个XML那么,你实际上并不具有for环;你可以把它变成一个while环路明确next调用。所有你需要做这个,我知道你正在做wrong,Äîbut那就是你正在处理一个破碎库的标志,它是唯一可用的解决方法的一个标志。这一点:for(event,elem)inxmlit:#line26doStuffWith(event,elem)实际上等同于:whileTrue:try:event,elem=next(xmlit)exceptStopIteration:breakdoStuffWith(event,elem)而现在,有添加的地方try,Äîalthough你甚至不真正需要;你可以附加其他except在现有try。问题是,你有什么打算在这里做?谁也不能保证iterator就可以继续它抛出一个异常后。事实上,所有的最简单的方法来创建iterator将不能够这样做。你可以为自己测试是否这是真的在这种情况下。在极少数情况下,当你需要这个,而它实际上帮助,你可能想要把它包起来。像这样:defskip_exceptions(it):whileTrue:try:yieldnext(it)exceptStopIteration:raiseexceptExceptionase:logging.info('{}'.format(e))然后,你只是做:for(event,elem)inskip_exceptions(xmlit):doStuffWith(event,elem)本文标题:如何解决Unicode的错误xml.etree.ElementTree.iterparse()?本文地址:CodeGo.net/9075227/1.sqlite3的ORDERBY需要时间2.只有在Emacs的Python命令行为什么UnicodeEncodeError长大的吗?3.Memcached的不尊重的元组排序4.解析HTML使用QWebElement,如何提取图像?5.在__init__中声明的变量似乎是类实例之间共享?6.Python2.6中我有两个文件。SysDump.py和li7.为什么一个特定的导入看到其他导入?Python2.6中8.创建具有PyGTK的屏幕保护程序的使用XScreenSaver9.与目录工作|python10.从字符串转换为元组和QUOT;\\"在python

② Python笔记:命令行参数解析

有些时候我们需要通过命令行将参数传递给脚本,C语言中有个getopt()方法,python中也有个类似的命令行参数解析方法getopt()。python也提供了比getopt()更简洁的argparse方法。另外,sys模块也可以实现简单的参数解析,本文将对这3种命令行参数解析方法简要介绍。

sys.argv是传入的参数列表,sys.argv[0]是当前python脚本的名称,sys.argv[1]表示第一个参数,以此类推。

命令行运行:

可以看到传入的参数通过sys.argv来获取,它就是一个参数列表。

python的getopt与C语言的的getopt()函数类似。相比于sys模块,支持长参数和短参数,并对参数解析赋值。但它需要结合sys模块进行参数解析,语法格式如下:

短参数为单个英文字母,如果必须赋值需要在后面加英文冒号( : ),长参数一般为字符串(相比短参数,更能说明参数含义),如果必须赋值需要在后面加等号( = )。

命令行运行:

注意:短参数(options)和长参数(long_options)不需要一一对应,可以任意顺序,也可以只有短参数或者只有长参数。

argparse模块提供了很多可以设置的参数,例如参数的默认值,帮助消息,参数的数据类型等。argparse类主要包括ArgumentParser、add_argument和parse_args三个方法。

下面介绍这三个函数的使用方法。

argparse默认提供了 -h | --help 参数:

命令行运行:

下面列出部分参数:

下面来添加参数:

命令行运行:

parse_args() 方法用于解析参数,在前面的示例代码中使用parse_args方法来提取参数值,对于无效或者错误的参数会打印错误信息和帮助信息:

命令行运行:

本文介绍了Python的三种命令行参数解析方法sys.argv、getopt和argparse,可以根据自己的需要进行选择,getopt和argparse两种方法相比来说,建议选择argparse,代码量更少更简洁。更详细的使用方法参考官方文档:

--THE END--

③ 如何用Python爬取搜索引擎的结果

我选取的是爬取网络知道的html 作为我的搜索源数据,目前先打算做网页标题的搜索,选用了 Python 的 scrapy 库来对网页进行爬取,爬取网页的标题,url,以及html,用sqlist3来对爬取的数据源进行管理。
爬取的过程是一个深度优先的过程,设定四个起始 url ,然后维护一个数据库,数据库中有两个表,一个 infoLib,其中存储了爬取的主要信息:标题,url ,html;另一个表为urlLib,存储已经爬取的url,是一个辅助表,在我们爬取每个网页前,需要先判断该网页是否已爬过(是否存在urlLib中)。在数据存储的过程中,使用了SQL的少量语法,由于我之前学过 MySQL ,这块处理起来比较驾轻就熟。
深度优先的网页爬取方案是:给定初始 url,爬取这个网页中所有 url,继续对网页中的 url 递归爬取。代码逐段解析在下面,方便自己以后回顾。
1.建一个 scrapy 工程:
关于建工程,可以参看这个scrapy入门教程,通过运行:

[python] view plain
scrapy startproject ***

在当前目录下建一个scrapy 的项目,然后在 spiders 的子目录下建立一个 .py文件,该文件即是爬虫的主要文件,注意:其中该文件的名字不能与该工程的名字相同,否则,之后调用跑这个爬虫的时候将会出现错误,见ImportError。
2.具体写.py文件:

[python] view plain
import scrapy
from scrapy import Request
import sqlite3

class rsSpider(scrapy.spiders.Spider): #该类继承自 scrapy 中的 spider
name = "" #将该爬虫命名为 “知道”,在执行爬虫时对应指令将为: scrapy crawl
#download_delay = 1 #只是用于控制爬虫速度的,1s/次,可以用来对付反爬虫
allowed_domains = ["..com"] #允许爬取的作用域
url_first = 'http://..com/question/' #用于之后解析域名用的短字符串
start_urls = ["http://..com/question/647795152324593805.html", #python
"http://..com/question/23976256.html", #database
"http://..com/question/336615223.html", #C++
"http://..com/question/251232779.html", #operator system
"http://..com/question/137965104.html" #Unix programing
] #定义初始的 url ,有五类知道起始网页

#add database
connDataBase = sqlite3.connect(".db") #连接到数据库“.db”
cDataBase = connDataBase.cursor() #设置定位指针
cDataBase.execute('''''CREATE TABLE IF NOT EXISTS infoLib
(id INTEGER PRIMARY KEY AUTOINCREMENT,name text,url text,html text)''')
#通过定位指针操作数据库,若.db中 infoLib表不存在,则建立该表,其中主键是自增的 id(用于引擎的docId),下一列是文章的标题,然后是url,最后是html

#url dataBase
cDataBase.execute('''''CREATE TABLE IF NOT EXISTS urlLib
(url text PRIMARY KEY)''')
#通过定位指针操作数据库,若.db中urlLib表不存在,则建立该表,其中只存了 url,保存已经爬过的url,之所以再建一个表,是猜测表的主键应该使用哈希表存储的,查询速度较快,此处其实也可以用一个外键将两个表关联起来

2. .py文件中的parse函数:

.py文件中的parse函数将具体处理url返回的 response,进行解析,具体代码中说明:

[python] view plain
def parse(self,response):
pageName = response.xpath('//title/text()').extract()[0] #解析爬取网页中的名称
pageUrl = response.xpath("//head/link").re('href="(.*?)"')[0] #解析爬取网页的 url,并不是直接使用函数获取,那样会夹杂乱码
pageHtml = response.xpath("//html").extract()[0] #获取网页html

# judge whether pageUrl in cUrl
if pageUrl in self.start_urls:
#若当前url 是 start_url 中以一员。进行该判断的原因是,我们对重复的 start_url 中的网址将仍然进行爬取,而对非 start_url 中的曾经爬过的网页将不再爬取
self.cDataBase.execute('SELECT * FROM urlLib WHERE url = (?)',(pageUrl,))
lines = self.cDataBase.fetchall()
if len(lines): #若当前Url已经爬过
pass #则不再在数据库中添加信息,只是由其为跟继续往下爬
else: #否则,将信息爬入数据库
self.cDataBase.execute('INSERT INTO urlLib (url) VALUES (?)',(pageUrl,))
self.cDataBase.execute("INSERT INTO infoLib (name,url,html) VALUES (?,?,?)",(pageName,pageUrl,pageHtml))
else: #此时进入的非 url 网页一定是没有爬取过的(因为深入start_url之后的网页都会先进行判断,在爬取,在下面的for循环中判断)
self.cDataBase.execute('INSERT INTO urlLib (url) VALUES (?)',(pageUrl,))
self.cDataBase.execute("INSERT INTO infoLib (name,url,html) VALUES (?,?,?)",(pageName,pageUrl,pageHtml))

self.connDataBase.commit() #保存数据库的更新

print "-----------------------------------------------" #输出提示信息,没啥用

for sel in response.xpath('//ul/li/a').re('href="(/question/.*?.html)'): #抓出所有该网页的延伸网页,进行判断并对未爬过的网页进行爬取
sel = "http://..com" + sel #解析出延伸网页的url
self.cDataBase.execute('SELECT * FROM urlLib WHERE url = (?)',(sel,)) #判断该网页是否已在数据库中
lines = self.cDataBase.fetchall()
if len(lines) == 0: #若不在,则对其继续进行爬取
yield Request(url = sel, callback=self.parse)

④ python用suds 调用webservice方法的时候报错。

其实用Python进行webservice通信进行数据交换,就是拼接字符串,没必要用第三方的库。

⑤ Python 命令行(三)- 命令行参数解析

Python 标准库中的 argparse 可以根据程序中的定义,从 sys.argv 中解析参数,并且自动生成帮助信息。

使用 add_argument 方法为应用程序添加参数,其中 add_argument 方法的参数比较多,这也使得 argparse 库的使用不够简洁,后续将继续为大家介绍更好用的命令行参数解析的开源库 click

下面是 add_argument 方法的参数及含义总结:

解析参数需要使用 ArgumentParser 实例的 parse_args 方法,此方法返回一个 NameSpace 对象;可以通过访问 NameSpace 对象属性的方式获取参数值。

下面是一个简单的例子:通过 parser.server 获取 --host 选项的值,通过 parse.boolean_switch 获取 -t 选项的值。

查看帮助信息:

参数默认值:

指定参数:

打印帮助信息:

打印版本信息:

传递参数:

阅读全文

与pythonfeedparse相关的资料

热点内容
iphone13对wap3加密 浏览:553
pdf文件打开失败 浏览:911
dubbo怎么调用不同服务器接口 浏览:38
全能解压王app历史版本 浏览:73
优先队列与拓扑排序算法 浏览:279
pdf转换formacbook 浏览:869
pdf文件内容怎么编辑 浏览:46
134压缩机排气温度多少 浏览:254
unity等待编译后 浏览:804
黑鲨手机锁屏视频在哪个文件夹 浏览:779
wow地图解压后怎么压缩 浏览:819
有pdf却打不开 浏览:460
七星彩软件app怎么下载 浏览:217
32单片机的重映射哪里改 浏览:816
为什么前端不用刷算法题 浏览:708
对称加密系统和公钥加密系统 浏览:428
历史地理pdf 浏览:606
物联网云服务器框架 浏览:648
sybaseisql命令 浏览:183
android权威编程指南pdf 浏览:663