#python #python-3.x #selenium
#python #python-3.x #selenium
Вопрос:
Я использую Selenium плюс python для поиска по ключевому слову, а затем в результатах поиска пытаюсь щелкнуть 5 лучших URL-адресов и получить данные из тега p, а затем вернуться назад. Итак, в основном я сохраняю данные с этих 5 сайтов. Но почему-то после поиска по ключевому слову я не могу щелкнуть URL-адреса и получить данные. я не знаю, что не так. Это код, который я написал. Пожалуйста, помогите.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome(executable_path="E:chromedriverchromedriver.exe")
driver.get("https://www.google.com/")
print(driver.title)
driver.maximize_window()
time.sleep(2)
driver.find_element(By.XPATH, "//input[@name='q']").send_keys('selenium')
driver.find_element(By.XPATH, "//div[@class='FPdoLc tfB0Bf']//input[@name='btnK']").send_keys(Keys.ENTER)
a = driver.find_elements_by_xpath("//div[@class='g']/a[@href]")
links = []
for x in a:
links.append(x.get_attribute('href'))
link_data = []
for new_url in links:
print('new url : ', new_url)
driver.get(new_url)
link_data.append(driver.page_source)
b = driver.find_elements(By.TAG_NAME, "p")
for data in b:
print(data.text)
driver.back()
driver.close()
Редактировать :
При навигации по ссылкам он также включает ссылки из «Люди также спрашивают». я не хочу перемещаться по этому окну. Как я могу это сделать?
Комментарии:
1. к вашему сведению, после некоторого запроса Google заблокирует или выдаст ошибку captcha
Ответ №1:
Если вы хотите использовать ссылки 16 или около того.
driver.get("https://www.google.com/")
print(driver.title)
driver.maximize_window()
time.sleep(2)
driver.find_element(By.XPATH, "//input[@name='q']").send_keys('selenium')
driver.find_element(By.XPATH, "//input[@name='btnK']").send_keys(Keys.ENTER)
a = driver.find_elements_by_xpath("//div[@class='g']/div/div/a")
links = []
for x in a:
links.append(x.get_attribute('href'))
link_data = []
for new_url in links:
print('new url : ', new_url)
driver.get(new_url)
link_data.append(driver.page_source)
b = driver.find_elements(By.TAG_NAME, "p")
for data in b:
print(data.text)
driver.back()
Комментарии:
1. Также у меня есть сомнения при навигации по ссылкам, которые также включают ссылки «Люди также спрашивают». я не хочу это включать. я отредактировал свой вопрос. как я могу это сделать?
Ответ №2:
У вас неправильный xpath для ссылок, должно быть:
"//div[@class='yuRUbf']/a[@href]"
Если вы посмотрите на соответствующую часть кода, вы увидите <a>
, что тег не является дочерним элементом <div class="g">
, а <div class="yuRUbf">
<div class="g"><!--m-->
<div class="tF2Cxc" data-hveid="CAkQAA" data-ved="2ahUKEwjphfjOoazuAhUO1VkKHVSkA_oQFSgAMAp6BAgJEAA">
<div class="yuRUbf"><a href="https://www.healthline.com/nutrition/selenium-benefits"
data-ved="2ahUKEwjphfjOoazuAhUO1VkKHVSkA_oQFjAKegQICRAC"
ping="/url?sa=tamp;amp;source=webamp;amp;rct=jamp;amp;url=https://www.healthline.com/nutrition/selenium-benefitsamp;amp;ved=2ahUKEwjphfjOoazuAhUO1VkKHVSkA_oQFjAKegQICRAC"><br>
<h3 class="LC20lb DKV0Md"><span>7 Science-Based Health Benefits of Selenium - Healthline</span></h3>
<div class="TbwUpd NJjxre"><cite class="iUh30 Zu0yb qLRx3b tjvcx">www.healthline.com<span
class="dyjrff qzEoUe"><span> › nutrition › selenium-benefits</span></span></cite></div>
</a>
...
</div>
</div>
</div>
Вы также можете немного изменить свои строки поиска, но это не меняет общего эффекта:
driver.find_element_by_xpath("//input[@name='q']").send_keys('selenium', Keys.ENTER)
Комментарии:
1. Спасибо, приятель, также я сомневаюсь, что при навигации по ссылкам он также включает ссылки «Люди также спрашивают». я не хочу это включать. я отредактировал свой вопрос. как я могу это сделать?
2. Попробуйте это в качестве вашего xpath
""//div[@id='center_col']//div[@class='yuRUbf']/a[@href]"
, могут быть более эффективные / безопасные способы сделать это, я не эксперт в xpath.3. Кто-нибудь знает, почему используется эта конкретная строка
'yuRUbf'
? Это что-то значит или это просто набор случайных символов?