#html #selenium #selenium-webdriver
#HTML #selenium #selenium-webdriver
Вопрос:
Я новичок в использовании selenium. Я использую selenium для извлечения ссылок из результатов поиска Google. Я хочу взять все ссылки из результатов поиска. вот как выглядит html, где тип ссылки, который я хочу извлечь, находится в <a href= >:
<div class='r'>
<a href="https://www.linkedin.com/in/thu-huong-trish-nguyen-7bba5722" ping="/url?
sa=tamp;amp;source=webamp;amp;rct=jamp;amp;url=https://www.linkedin.com/in/thu-huong-trish-nguyen-
7bba5722amp;amp;ved=2ahUKEwiqw5D0qt3rAhVG7J4KHd3GBbQQFjAAegQIAxAB"><br><h3 class="LC20lb
DKV0Md">Thu-Huong (Trish) Nguyen - Research Data Analyst II - LinkedIn</h3><div class="TbwUpd
NJjxre"><cite class="iUh30 gBIQub bc tjvcx">www.linkedin.com<span class="eipWBe"> › ... </span></cite></div></a>
Остальные результаты имеют точно такой же тип класса и форму, я, по сути, хочуhttps://www.linkedin.com ссылка. Я сделал это как попытку
elems = driver.find_elements_by_xpath("//a[@href]")
for elem in elems:
print(elem.get_attribute("href"))
это сработало замечательно, я в значительной степени извлекаю все ссылки из результатов поиска Google, однако единственная проблема заключается в том, что мне нужны только те типы ссылок, которые я указал. Мой код возвращает ссылки, которые я хочу, и большое количество ссылок, которые мне не нужны.
Решение, которое, как я думал, будет работать идеально, заключается в том, что можно использовать тот факт, что все эти ссылки относятся к классу типа r .
Я попытался включить r в driver.find_elements, но не нашел никаких решений в Интернете.
Есть идеи
Комментарии:
1. @arundeepchohan Я выполнил следующие элементы = driver.find_elements_by_xpath(«//div[(@class,’r’)]/a») и получил сообщение об ошибке, что строка не является допустимым выражением Xpath
2. Я не совсем понимаю, я получил сообщение об ошибке, в котором говорится, что выражение недопустимо. и скрипт теперь не будет выполнять оценку. я сделал что-то не так?
3. //div[(@class, ‘r’)]//a[@href] попробуйте это
4. @arundeepchohan Я все еще получаю ту же ошибку
5. Я не верю, что это так, имя класса остается неизменным и согласуется по всей странице. Если я ищу что-то еще, остается то же имя класса.
Ответ №1:
Этот XPath поможет вам получить все a
теги, содержащиеся https://www.linkedin.com
в href
.
//div[@class='g']//div[@class='r']/a[contains(@href, 'https://www.linkedin.com')]
Комментарии:
1. почему вы включили часть //div[@class=’g’]? если я исключил его, я получил веб-элементы, однако, включив его, я получил нужные ссылки, которые я хотел. Далее, почему это работает вообще?
2. если вы хотите, вы можете исключить
//div[@class='g']
. Я не понимаю?Further why does this work in general?
3. Нет, я запустил код без
//div[@class='g']
, и он не сработал, поэтому он необходим. Мне было интересно узнать о синтаксисе, почему это так, как есть?4. Это связано с относительным XPath,
//
означает, что он может запускаться из любого места в DOM, где есть divclass='g'
, а следующий div является потомком этого div. contains используется для проверки атрибута, имеющего значение. Вы можете узнать больше о XPath по этой ссылке