Reputation: 11
""" My code is to enter a news site and extract with Xpath all the titles, subtitles and links of the articles, then put them in lists and export them in CSV.
But in the exported CSV it just keeps repeating just one title, one subtitle and one link.
What am I doing wrong?
"""
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import pandas as pd
servico = Service(ChromeDriverManager().install())
navegador = webdriver.Chrome(service=servico)
url_do_site = "https://br.noticias.yahoo.com/"
navegador.get(url_do_site)
containers = navegador.find_elements(By.XPATH,'//li \[@class ="js-stream-content Pos(r)"\]')
print(containers)
titles = \[\]
subtitles = \[\]
links = \[\]
for container in containers:
title = container.find_element(By.XPATH,'//li \[@class ="js-stream-content Pos(r)"\]/div/div/div/h3/a/u').text
subtitle = container.find_element(By.XPATH,'//li \[@class ="js-stream-content Pos(r)"\]/div/div/div/p').text
link = container.find_element(By.XPATH,'//div \[@class ="Cf"\]/div /h3/a').get_attribute('href')
titles.append(title)
subtitles.append(subtitle)
links.append(link)
my_dict = {'title': titles, 'subtitle': subtitles, 'link': links}
df_headlines = pd.DataFrame(my_dict)
df_headlines.to_csv('headline.csv')
navegador.quit()
Upvotes: 1
Views: 182
Reputation: 33384
Yes, that's correct. because everytime it is fetching value from first parent node only.
Try this.
for container in containers:
title = container.find_element(By.XPATH,'.//div/div/div/h3/a/u').text
subtitle = container.find_element(By.XPATH,'.//div/div/div/p').text
link = container.find_element(By.XPATH,'.//div[@class ="Cf"]/div/h3/a').get_attribute('href')
titles.append(title)
subtitles.append(subtitle)
links.append(link)
.
means intermediate child of the parent element.
You can reduce the lines of code as well
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
import pandas as pd
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://br.noticias.yahoo.com/")
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[@name='agree']"))).click()
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"h3[class^='Mb('] a")))
titles =[item.text for item in driver.find_elements(By.CSS_SELECTOR,"h3[class^='Mb('] a")]
subtitles =[item.text for item in driver.find_elements(By.CSS_SELECTOR,"h3[class^='Mb(']+p")]
links =[item.get_attribute("href") for item in driver.find_elements(By.CSS_SELECTOR,"h3[class^='Mb('] a")]
my_dict = {'title': titles, 'subtitle': subtitles, 'link': links}
df_headlines = pd.DataFrame(my_dict)
print(df_headlines)
df_headlines.to_csv('headline.csv')
Console output:
title subtitle link
0 Apoiadores xingam Bolsonaro após live de despe... BRASÍLIA, DF (FOLHAPRESS) - Apoiadores de Jair... https://br.noticias.yahoo.com/apoiadores-xinga...
1 PRF estima que 47 mil pessoas devem vir a Bras... A Polícia Rodoviária Federal (PRF) estima que ... https://br.noticias.yahoo.com/prf-estima-que-4...
2 Gordofobia: 'Usavam minhas fotos para falar do... No país da harmonização facial e dos influence... https://br.noticias.yahoo.com/usavam-minhas-fo...
3 Quais cidades Pelé morou? Cidadão do mundo, Pelé morou em cinco cidades ... https://br.noticias.yahoo.com/quais-cidades-pe...
4 China promove seu embaixador nos EUA, Qin Gang... PEQUIM/WASHINGTON (Reuters) - A China nomeou Q... https://br.noticias.yahoo.com/china-promove-se...
5 Confira o que abre e fecha em São Paulo no fim... SÃO PAULO, SP (FOLHAPRESS) - Com a festa de Ré... https://br.noticias.yahoo.com/confira-o-que-ab...
6 Saiba quem é Tarciana Medeiros, próxima presid... Escolhida nesta sexta-feira para chefiar o Ban... https://br.noticias.yahoo.com/saiba-quem-%C3%A...
7 Pelé será homenageado no réveillon de Copacabana Pelé será homenageado no réveillon de Copacaba... https://br.noticias.yahoo.com/pel%C3%A9-ser%C3...
8 Presidente faz balanço do governo e afirma não... Às vésperas de deixar a Presidência, Jair Bols... https://br.noticias.yahoo.com/presidente-faz-b...
9 Papa emérito Bento 16 tem condição estável apó... CIDADE DO VATICANO (Reuters) - O papa emérito ... https://br.noticias.yahoo.com/papa-em%C3%A9rit...
10 Estradas para o litoral de SP têm congestionam... SÃO PAULO, SP (FOLHAPRESS) - A poucas horas do... https://br.noticias.yahoo.com/estradas-para-o-...
11 Fórum Econômico Mundial não pediu a morte de c... O Fórum Económico Mundial (WEF, na sigla em in... https://br.noticias.yahoo.com/f%C3%B3rum-econ%...
12 Yashin, Eusébio, Charlton: relembre lendas enf... Tricampeão do mundo e dono de quatro participa... https://br.noticias.yahoo.com/yashin-eus%C3%A9...
13 Talibãs colocam milhões de vida em risco ao pr... Esta quinta-feira, a ONU apelou ao diálogo par... https://br.noticias.yahoo.com/talib%C3%A3s-col...
14 Em ato final, Bolsonaro mostra que seguirá eng... Em seu ato final, Bolsonaro mostrou mais uma v... https://br.noticias.yahoo.com/em-ato-final-bol...
15 Justiça da Bolívia determina 4 meses de prisão... A Justiça boliviana determinou na madrugada de... https://br.noticias.yahoo.com/justi%C3%A7a-da-...
16 Indicador de Incerteza da Economia sobe 0,6 po... O Indicador de Incerteza da Economia (IIE-Br) ... https://br.noticias.yahoo.com/incerteza-da-eco...
17 Regina Casé faz homenagem a Letícia Colin, que... A atriz Regina Casé homenageou, nesta sexta-fe... https://br.noticias.yahoo.com/regina-cas%C3%A9...
18 Morre Pelé: da pobreza à glória, a história do... Da infância humilde até o estrelato mundial, o... https://br.noticias.yahoo.com/morre-pel%C3%A9-...
19 Governo revoga portaria e abre caminho para pr... BRASÍLIA (Reuters) - O governo de Jair Bolsona... https://br.noticias.yahoo.com/governo-revoga-p...
Upvotes: 2