Проблема при получении второй ссылки, когда первая ссылка содержит определенное ключевое слово рядом - PullRequest
0 голосов
/ 25 февраля 2019

Я создал скрипт на python в сочетании с селеном, чтобы получить первую ссылку (заполненную duckduckgo.com) любого элемента поиска, если только ключевое слово Ad не находится рядом с этой ссылкой, как на рисунке ниже.Если первая ссылка содержит само ключевое слово, то скрипт получит вторую ссылку и завершит работу.

Мой текущий поиск - houzz

enter image description here

Это моя попытка (она всегда получает первую ссылку независимо от наличия этого ключевого слова Ad):

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

link = "https://duckduckgo.com/?q={}&ia=web"

def get_info(driver,keyword):
    driver.get(link.format(keyword))
    for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,"h2.result__title"))):
        lead_link = item.find_element_by_css_selector("a.result__a").get_attribute("href")
        break
    print(lead_link)

if __name__ == '__main__':
    chromeOptions = webdriver.ChromeOptions()
    chromeOptions.add_argument("--headless")
    driver = webdriver.Chrome(options=chromeOptions)
    wait = WebDriverWait(driver, 10)
    try:
        get_info(driver,"*houzz*")
    finally:
        driver.quit()

Как я могу исправить свой скрипт, чтобы получить вторую ссылку, если ключевое слово Ad рядом с первой ссылкой?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Похоже, просто добавьте #links:

lead_link = item.find_element_by_css_selector("#links a.result__a").get_attribute("href")

Реклама находится внутри #ads div

0 голосов
/ 26 февраля 2019

Вы можете использовать XPath

//h2[not(./span)]/a
  ^ h2 is the container for the entire link plus Ad icon
    ^ exclude h2s with SPAN children since they contain the Ad icons
                  ^ what you DO want is the A result (hyperlink)
...