for link in hxs.select("//a[contains(@href,'/women-')]"): if ('.a[notcontains(@href,"/women-shoes")]'): self.log("LINKS2 :: %s" % attribute::href())
Первый оператор выбирает все гиперссылки, которые содержат /women- в своем URL. В основном я хочу выбрать все ссылки, которые имеют /women- в своем URL, но не /women-shoes.
/women-
/women-shoes
for
not
Я думаю, что он будет более оптимизирован, так как сначала увидит, что URL не содержит / women-shoes, а затем проверит, содержит ли он / women-:
queryStr = "//a[not(contains(@href,'/women-shoes')) and contains(@href,'/women-') ]
Почему бы не выполнить фильтрацию по вашему запросу?
queryStr = "//a[contains(@href,'/women-') and not(contains(@href,'/women-shoes'))]" for link in hxs.select(queryStr): self.log("LINKS2 :: %s" % attribute::href())