Медленный поиск HtmlElement
День добрый!
Давно не пользовался zenno, раньше такого не замечал - очень долго идет поиск элементов на странице.
Допустим, парсим сниппеты яндекса 50 штук (https://yandex.ru/search/?text=test&numdoc=50)
На моем машине (i7-4790k) парсинг занимает 4500-5000 милисекунд ^^
Вот точно такой же код на Python
Парсинг занимает 7-9 милисекунд.
Что я делаю не так?
Пробовал вместо FindChildByXPath использовать FindChildByAttribute - результат такой же.
День добрый!
Давно не пользовался zenno, раньше такого не замечал - очень долго идет поиск элементов на странице.
Допустим, парсим сниппеты яндекса 50 штук (https://yandex.ru/search/?text=test&numdoc=50)
Код:
HtmlElementCollection serpItems = instance.ActiveTab.FindElementsByXPath("//ul[contains(@class, 'serp-list')]/li");
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
foreach (HtmlElement serpItem in serpItems) {
string url = serpItem.FindChildByXPath(".//a[contains(@class, 'link_outer_yes')]", 0).GetAttribute("href").Trim();
string title = serpItem.FindChildByXPath(".//a[contains(@class, 'organic__url')]", 0).InnerText.Trim();
string snippet = serpItem.FindChildByXPath(".//div[contains(@class, 'organic__text')]", 0).InnerText.Trim();
// string url = serpItem.FindChildByAttribute("a", "class", "linkt_outer_yes", "text", 0).GetAttribute("href").Trim();
// string title = serpItem.FindChildByAttribute("a", "class", "organic__url", "text", 0).InnerText.Trim();
// string snippet = serpItem.FindChildByAttribute("div", "class", "organic__text", "text", 0).InnerText.Trim();
project.SendInfoToLog(url, false);
project.SendInfoToLog(title, false);
project.SendInfoToLog(snippet, false);
}
long diff = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond - milliseconds;
project.SendInfoToLog(diff.ToString(), false);
Вот точно такой же код на Python
Код:
import lxml.html
import time
filename = r'D:\Downloads\yandex.html' // html dom сохраненный из zenno
html = open(filename, 'rt').read()
doc = lxml.html.fromstring(html)
t = time.time()
serpItems = doc.xpath('//ul[contains(@class, "serp-list")]/li')
for serpItem in serpItems:
url = serpItem.xpath('.//a[contains(@class, "link_outer_yes")]')[0].text_content().strip()
title = serpItem.xpath('.//a[contains(@class, "organic__url")]')[0].text_content().strip()
snippet = serpItem.xpath('.//div[contains(@class, "organic__text")]')[0].text_content().strip()
print url
print title
print snippet
print (time.time() - t) * 1000
Что я делаю не так?
Пробовал вместо FindChildByXPath использовать FindChildByAttribute - результат такой же.