2012-04-18 79 views
0

我使用Scrapy履带爬行超过10万页的网站。在这种情况下速度是最大的问题。今天我注意到hxs.select('//*').re('something')hxs.select('//script/text()').re('something')要慢。任何专家可以向我解释为什么?xpathselector如何影响scrapy抓取运行的速度?

据我所知,无论我使用哪种xpath选择器,爬虫应下载整个页面。所以xpath根本不应该影响速度。

非常感谢任何提示。

+0

如果我必须使用hxs.select('// *').re('something'),我该如何加快爬虫的运行速度。因为我不知道页面上的“东西”在哪里。还是有没有更好的方法来做搜索,而不是使用select('// *')? – Dale 2012-04-18 20:58:48

+0

当然你有*一些*想法它在哪里?例如'hxs.select('/ html/body').re('something')'。但是,如果它真的可以在任何地方,那么就放弃'select':'hxs.re('something')' – 2012-04-18 21:09:51

+0

爬行器在删除选择后运行得更快。但我想知道为什么会发生这种情况?选择如何变得如此大的不同?谢谢 – Dale 2012-04-19 14:39:43

回答

1

这与下载速度无关。

XPath //*选择整个页面。 XPath //script/text()只选择脚本元素中的文本。所以当然第二个是更快,因为有更少的文本搜索与re()调用!

+0

嗨弗朗西斯,爬行选择后,爬行速度更快。但我想知道为什么会发生这种情况? “选择”如何变得如此不同?谢谢 – Dale 2012-04-19 14:42:58

1

恐怕您可能会在整个文档中寻找'某些东西',所以您应该仍然可以使用hxs.select('//*').re('something')

关于速度问题:答案是,如果您在4k大的文档中查找“something”一词,当然需要更长的时间,然后过滤文档text(),然后在该文档中查找该单词那个文本。

0

XPath在爬虫速度中绝对有作用,爬虫下载页面,但Xpath处理爬虫下载的Html。所以如果页面很大,那么xpath将需要时间来处理整个Html。