我使用Scrapy履带爬行超过10万页的网站。在这种情况下速度是最大的问题。今天我注意到hxs.select('//*').re('something')
比hxs.select('//script/text()').re('something')
要慢。任何专家可以向我解释为什么?xpathselector如何影响scrapy抓取运行的速度?
据我所知,无论我使用哪种xpath选择器,爬虫应下载整个页面。所以xpath根本不应该影响速度。
非常感谢任何提示。
我使用Scrapy履带爬行超过10万页的网站。在这种情况下速度是最大的问题。今天我注意到hxs.select('//*').re('something')
比hxs.select('//script/text()').re('something')
要慢。任何专家可以向我解释为什么?xpathselector如何影响scrapy抓取运行的速度?
据我所知,无论我使用哪种xpath选择器,爬虫应下载整个页面。所以xpath根本不应该影响速度。
非常感谢任何提示。
这与下载速度无关。
XPath //*
选择整个页面。 XPath //script/text()
只选择脚本元素中的文本。所以当然第二个是更快,因为有更少的文本搜索与re()
调用!
嗨弗朗西斯,爬行选择后,爬行速度更快。但我想知道为什么会发生这种情况? “选择”如何变得如此不同?谢谢 – Dale 2012-04-19 14:42:58
恐怕您可能会在整个文档中寻找'某些东西',所以您应该仍然可以使用hxs.select('//*').re('something')
。
关于速度问题:答案是,如果您在4k大的文档中查找“something”一词,当然需要更长的时间,然后过滤文档text()
,然后在该文档中查找该单词那个文本。
XPath在爬虫速度中绝对有作用,爬虫下载页面,但Xpath处理爬虫下载的Html。所以如果页面很大,那么xpath将需要时间来处理整个Html。
如果我必须使用hxs.select('// *').re('something'),我该如何加快爬虫的运行速度。因为我不知道页面上的“东西”在哪里。还是有没有更好的方法来做搜索,而不是使用select('// *')? – Dale 2012-04-18 20:58:48
当然你有*一些*想法它在哪里?例如'hxs.select('/ html/body').re('something')'。但是,如果它真的可以在任何地方,那么就放弃'select':'hxs.re('something')' – 2012-04-18 21:09:51
爬行器在删除选择后运行得更快。但我想知道为什么会发生这种情况?选择如何变得如此大的不同?谢谢 – Dale 2012-04-19 14:39:43