您的位置:

python解析慢,python速度慢怎么解决

本文目录一览:

如何解决Python读取PDF内容慢的问题

1,引言

晚上翻看《Python网络数据采集》这本书,看到读取PDF内容的代码,想起来前几天集搜客刚刚发布了一个抓取网页pdf内容的抓取规则,这个规则能够把pdf内容当成html来做网页抓取。神奇之处要归功于Firefox解析PDF的能力,能够把pdf格式转换成html标签,比如,div之类的标签,从而用GooSeeker网页抓取软件像抓普通网页一样抓取结构化内容。

从而产生了一个问题:用Python爬虫的话,能做到什么程度。下面将讲述一个实验过程和源代码。

2,把pdf转换成文本的Python源代码

下面的python源代码,读取pdf文件内容(互联网上的或是本地的),转换成文本,打印出来。这段代码主要用了一个第三方库PDFMiner3K把PDF读成字符串,然后用StringIO转换成文件对象。(源代码下载地址参看文章末尾的GitHub源)

from urllib.request import urlopenfrom pdfminer.pdfinterp import PDFResourceManager, process_pdffrom pdfminer.converter import TextConverterfrom pdfminer.layout import LAParamsfrom io import StringIOfrom io import opendef readPDF(pdfFile):

rsrcmgr = PDFResourceManager()

retstr = StringIO()

laparams = LAParams()

device = TextConverter(rsrcmgr, retstr, laparams=laparams)

process_pdf(rsrcmgr, device, pdfFile)

device.close()

content = retstr.getvalue()

retstr.close()    return content

pdfFile = urlopen("")

outputString = readPDF(pdfFile)print(outputString)

pdfFile.close()

如果PDF文件在你的电脑里,那就把urlopen返回的对象pdfFile替换成普通的open()文件对象。

3,展望

这个实验只是把pdf转换成了文本,但是没有像开头所说的转换成html标签,那么在Python编程环境下是否有这个能力,留待今后探索。

4,集搜客GooSeeker开源代码下载源

1. GooSeeker开源Python网络爬虫GitHub源

5,文档修改历史

2016-05-26:V2.0,增补文字说明

2016-05-29:V2.1,增加第六章:源代码下载源,并更换github源的网址

python 爬虫 解析效率如何提升

提高爬虫效率的方法

协程。采用协程,让多个爬虫一起工作,可以大幅度提高效率。

多进程。使用CPU的多个核,使用几个核就能提高几倍。

多线程。将任务分成多个,并发(交替)的执行。

分布式爬虫。让多个设备去跑同一个项目,效率也能大幅提升。

打包技术。可以将python文件打包成可执行的exe文件,让其在后台执行即可。

其他。比如,使用网速好的网络等等。

反爬虫的措施

限制请求头,即request header。解决方法:我们可以填写user-agent声明自己的身份,有时还要去填写origin和referer声明请求的来源。

限制登录,即不登录就不能访问。解决方法:我们可以使用cookies和session的知识去模拟登录。

复杂的交互,比如设置“验证码”来阻拦登录。这就比较难做,解决方法1:我们用Selenium去手动输入验证码;方法2:我们用一些图像处理的库自动识别验证码(tesserocr/pytesserart/pillow)。

ip限制。如果这个IP地址,爬取网站频次太高,那么服务器就会暂时封掉来自这个IP地址的请求。 解决方法:使用time.sleep()来对爬虫的速度进行限制,建立IP代理池或者使用IPIDEA避免IP被封禁。

python beautifulsoup 解析 xml 速度很慢

那你为什么要用 美丽的汤 来解析xml呢?

为什么不用 xml.dom.minidom.parseString 或者别的 专门解析xml的模块呢?

shell脚本做文本解析同php和python比哪个效率更高

N年前为了每天分析数十GB的日志,正好做过测试。测试是在Linux环境下(Redhat ES

3),测试处理一个数百兆的日志文件进行汇总分析(邮件日志),分别用C, Perl,

Python,Shell做同样的处理。处理速度排名是CPerlpythonshell。C是最快的,比别的快上至少

一个数量级;其次是Perl,毕竟是为文本处理而生,最强的内置正则表达式;Python比Perl慢了点,记得速度是Perl的60%左右;shell

最慢,虽然sed, grep,awk都不慢(其实都是C写的),但通过shell组合在一起效率还是差了不少。

如何使用python解析超大XML文档

在工作时最有吸引力的地方在于可以尽量避免使用昔日的技术。主机、租用线路、COBOL语言......没有人应该要处理这些东西了,对不对?不幸的是,你最终会与现实发生冲突,即使是2014年,大家都知道JSON是最好的方式,你的票务供应商(你无法控制的)会告诉你,只有使用XML导出才能让大容量的数据输出他们的系统。

唉~~~~,好,很好,无所谓。这只是一次性的事情,我不需要照顾和养活这个XML,我只需要解析它并将数据保存到Postgres中,我们就可以利用它。不应该太困难,我需要写一点python脚本…

import xml.etree.cElementTree as ET

tree = ET.parse('huge.xml')

for ticket_node in tree.findall('ticket'):

#etc...

......这将工作的非常好,如果我们谈论的是一个几MB的XML文档,但是如果遇到的是huge.xml它是1.3GB的巨大文档,这种方法只会融化你的笔记本电脑(以16GB的MacBookPro,一旦python的过程花了超过约3GB的内存,系统变得几乎完全反应迟钝,并且它几乎还没有完成)。回到原点。

首先让我们快速浏览一下我们的数据。

?xml version="1.0" encoding="UTF-8"?

tickets report_date="20140217"

ticket

!-- various ticket fields, some of which I want --

comments type="array"

comment

!-- various comment fields, some of which I want --

/comment

!-- possibly more comment tags --

/comments

/ticket

!-- many, many ticket tags --

/tickets

不是很复杂,作为一个整体它不是一个真正的文件中,ticket节点只是一个列表,每一类又是一个小文件,我想挑出几部分出来。我不需要做针对树的任何复杂的遍历,只是希望从每个ticket节点获得一些数据然后把它扔掉再读下一个。原来ElementTree的对眼前这个场景提供了一个工具:iterparse()。让我们再试一次:

import xml.etree.cElementTree as ET

for event, element in ET.iterparse('huge.xml'):

if event == 'end' and element.tag == 'ticket':

#process ticket...

…什么? !我的笔记本电脑又融化了!跟parse-the-whole-file的方法一样使用了完全相同的内存(和系统响应能力)。到底发生了什么事?

好吧,稍微google了一下,google告诉我,当iterparse()读取元素时,它仍然是在内存中建立了一个完整的文档树,就像我一开始使用parse()方法一样。几个博客和stackoverflow的答案推荐添加element.clear()方法在循环结束时清理你不需要的对象,可以限制内存消耗。我拯救了你的麻烦:它不工作。其他博客,so的答案,甚至一个IBM白皮书表明需要在循环结束时进行更彻底的清扫工作结束:

import lxml.etree as ET #the IBM piece used lxml but I tried cElementTree also

for event, element in ET.iterparse('huge.xml'):

if event == 'end' and element.tag == 'ticket':

#process ticket...

element.clear()

while elem.getprevious() is not None:

del elem.getparent()[0]

......哎呀!我溶化了另一台笔记本电脑!

为什么不工作?坦率地说,我不知道。

我稍微离题一下来说说为什么我爱Python。作为一个DBA和系统工程师,我面对着大量的一次性编程挑战。移动这个从这里到那里、Munge数据、将数据从这里迁移到哪里。这种类型的挑战是非常适合于蛮力编程解决问题的这种方式。总之,有时是不值得在建立一个优雅的、易于维护的解决方案上花费任何时间。有时候,你只需要解决这个问题,然后忘掉它。 在处理这类问题上Python最棒的,简洁的语法、良好的设计理念、丰富的库都有助于这个工具,很容易快速解决您碰到的任何问题。即使速度比同等的Java解决方案的10倍还慢,如果需要5分钟的时间写而不是5小时,我更愿意使用python,因为人类工时比CPU工时更有价值。

所有这一切都证明下述方式解决了我的问题,而不会融化的笔记本电脑:

import xml.etree.cElementTree as ET

def process_buffer(buf):

tnode = ET.fromstring(buf)

#pull it apart and stick it in the database

inputbuffer = ''

with open('huge.xml','rb') as inputfile:

append = False

for line in inputfile:

if 'ticket' in line:

inputbuffer = line

append = True

elif '/ticket' in line:

inputbuffer += line

append = False

process_buffer(inputbuffer)

inputbuffer = None

del inputbuffer #probably redundant...

elif append:

inputbuffer += line

不是最优雅,或有效率,或者通用的解决方案,但它可以工作。刚刚看了手边的手册,利用其结构的简单性,在解析之前根据xml文件的内容将它切成可管理的块,然后解析和处理每个块,终于可以确保不再需要更长的时间来把它全部处理完。

python解析慢,python速度慢怎么解决

2022-11-18
python速度虽然慢(python太慢)

2022-11-14
python运行突然特别慢(python速度为什么慢)

2022-11-11
python执行速度太慢,python运行很慢

2022-11-28
python调用js函数运行慢(python代码运行慢)

本文目录一览: 1、python中如何调用js文件中的方法呢 2、selenium+Python调用js报错怎么处理? 3、如何用python抓取js生成的数据 4、AngularJS读取Python

2023-12-08
包含carlo在python中极慢的词条

2022-11-22
解决mysql数据库访问速度慢,mysql数据库速度变慢

2022-11-17
笔记本渲3dmax太慢怎么提升,3dmax渲染特别慢怎么调

2022-12-01
pythonmysql速度慢的简单介绍

2022-11-14
python安装库太慢(python安装包安装速度很慢)

2022-11-15
pythonjson遍历慢,python遍历太慢

本文目录一览: 1、python怎么遍历json文件 2、python中如何遍历json数组 3、如何用python读取json里面的值啊 4、接收json有上万条数据,怎么用Python优化解析 p

2023-12-08
ie打开网页慢js,IE打开网页慢怎么解决

本文目录一览: 1、IE浏览器打开网页速度超级慢 2、怎样解决ie浏览器打开慢的问题 3、IE浏览器开网页较慢是什么原因? 4、Win10 IE浏览器的网页加载速度很慢总是卡死怎么办 5、为什么ie浏

2023-12-08
cad块复制好慢,cad复制很慢怎么解决

2022-11-23
js文件下载速度慢的原因是什么,为什么文件下载速度慢

2022-11-24
js文件加载太慢(js文件加载太慢怎么解决)

本文目录一览: 1、网站加载的js过多,打开速度很慢很慢。 2、网站中有三个js文件大小超过100KB,超级影响加载速度,想问怎样优化? 3、用的是七牛云,当出现多个js加载慢的问题要怎么解决? 4、

2023-12-08
js网页速度慢(浏览一些网页网速慢)

本文目录一览: 1、在网页里面调用了js,打开速度变得非常慢,怎样写js让网页打开快啊 2、网站打开慢,检查是js调用导致的怎么处理呢? 3、用的是七牛云,当出现多个js加载慢的问题要怎么解决? 4、

2023-12-08
python课堂整理32(python笔记全)

2022-11-12
python垃圾收集会那么慢吗,python很垃圾

2022-11-18
为什么java反射慢(java速度慢)

2022-11-14
python的用法笔记本(笔记本学python)

2022-11-16