Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 提高分组解析速度_Html_Python 3.x_Beautifulsoup - Fatal编程技术网

Html 提高分组解析速度

Html 提高分组解析速度,html,python-3.x,beautifulsoup,Html,Python 3.x,Beautifulsoup,我得到了一个15MB的ish htm文件,其中我想从值表中获取名称。由于我对python的知识相当有限,这是我找到的解决问题的最佳方案,但问题是它相当缓慢。任何加快数据解析速度或使代码整体运行更快的方法 ? 我已经将解析器更改为lxml,但没有注意到太多的改进。 我想实现的是,随着条目的添加,BeautifulSoup只会从该点开始搜索,但我不知道如何进行搜索 def炖肉(fp): 将open(fp,encoding=“utf8”)作为f: 汤=美汤(f,features=“lxml”) 返汤

我得到了一个15MB的ish htm文件,其中我想从值表中获取名称。由于我对python的知识相当有限,这是我找到的解决问题的最佳方案,但问题是它相当缓慢。任何加快数据解析速度或使代码整体运行更快的方法 ?

我已经将解析器更改为lxml,但没有注意到太多的改进。 我想实现的是,随着条目的添加,BeautifulSoup只会从该点开始搜索,但我不知道如何进行搜索

def炖肉(fp):
将open(fp,encoding=“utf8”)作为f:
汤=美汤(f,features=“lxml”)
返汤
def名称_爬虫(汤):
i=2
而我<6853:
tasty=汤。选择(“tr.cItem:nth child(“+str(i)+”)>td:nth child(1)>a:nth child(1)”
tastier=search('target=“\u blank”>(.*),str(tasty))
将open(“database.json”,“a+”)作为f:
f、 写入(tastier.group(1)+“\n”)
i=i+1
打印(“+tastier.group(1)”添加了[+]项)

稍微改进代码使其运行稍微快一点,但更改为PyPy后,代码运行速度提高了10倍

def炖肉(fp):
将open(fp,encoding=“utf8”)作为f:
汤=美汤(f,features=“lxml”)
返汤
def酱汁(汤):
i=2
最美味的=[]
而我<6853:
tasty=汤。选择(“tr.cItem:nth child(“+str(i)+”)>td:nth child(1)>a:nth child(1)”
tastier=search('target=“\u blank”>(.*),str(tasty))
i=i+1
tastiest.append(tastier.group(1))
打印(“+tastier.group(1)”添加了[+]项)
以开放(“database_-wearms.obj”、“ab+”)作为f:
腌菜。倾倒(最美味,f)
编辑:在阅读了BS文档之后,我使用了
SoupSieve
,以便只查看a标记,现在它的运行速度要快得多

def炖肉(fp):
标签=SoupStrainer(“a”)
将open(fp,encoding=“utf8”)作为f:
soup=BeautifulSoup(f,features=“lxml”,parse_only=tags)
返汤
def酱汁(汤):
i=1
最美味的=[]
尽管如此:
tastier=findall('730/(.*)“target=“\u blank',str(汤))
最美味的。追加(更美味的[i])
打印(“+tastier[i]”添加了[+]项)
i=i+1
以开放(“database_-wearms.obj”、“ab+”)作为f:
腌菜。倾倒(最美味,f)

您可能想做的是首先读取json文件并创建一些已经存在的值列表,然后让您的刮板只抓取列表中不存在的数据。我不知道你的数据是什么样子或者html,所以我可以;I don’我不能确切地说你想如何全面地实现这一点。您可以共享url或html吗?老实说,我不知道这是否会加快速度。我敢打赌,瓶颈是伴随着汤对象中的读数而来的
soup=BeautifulSoup(f,features=“lxml”)
。如果它是一个大文件,这将花费最长的时间,不一定要遍历元素/标记。@chitown88我认为瓶颈在于对元素的解析,因为脚本运行的时间越长,打印添加条目的消息所需的时间就越长。下面是我们在执行整个检查时遇到的问题,如果它也有部分,谢谢您的帮助!