I am doing a project which requires webscraping news content (the whole article) from websites. the page I am scraping is https://tg24.sky.it/politica, and I got the headlines with the following code:
r= requests.get('https://tg24.sky.it/politica')
b= soup(r.content, 'lxml')
title=[]
for c in b.findAll('h2',{'class':'c-card__title'}):
title.append(c.text.strip())
Now I want to scrape the href and through it acces the whole content . I am having trouble extracting the href
In the webiste the href
is in
<a href="https://tg24.sky.it/politica/2022/07/15/crisi-governo-draghi-ultime-notizie">
<article >
<div >
<h2 >Governo Draghi, le ultime notizie sulla crisi aperta da Conte e M5S</h2>
How can I extract the href
I tried
for c in b.findAll('a',{'class':'c-card c-card--CA10-m c-card--CA15-t c-card--CA15-d c-card--media c-card--base '}):
links.append(c.a['href'])
but it does not work.
CodePudding user response:
I would change two things:
- Get the
href
directly: replacec.a['href']
withc['href']
- Specify multiple classes inside a
list
:soup.findAll("a", {"class": ["c-card", "c-card--CA10-m"]})
In code:
import requests
from bs4 import BeautifulSoup
URL = "https://tg24.sky.it/politica"
response = requests.get(URL)
soup = BeautifulSoup(response.text, "lxml")
links = []
for link in soup.findAll("a", {"class": ["c-card", "c-card--CA10-m"]}):
links.append(link["href"])
print(links)
NOTE: I haven't added all the classes, just enough to prove my point.
CodePudding user response:
If you insist of getting the urls based off h2
elements, then you can do:
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17'}
r = requests.get('https://tg24.sky.it/politica', headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')
headlines = soup.select('h2')
for headline in headlines:
print(headline.parent.parent.parent.get('href'))
This will result in
https://tg24.sky.it/politica/2022/07/16/crisi-governo-draghi-ultime-notizie
https://tg24.sky.it/politica/2022/07/16/crisi-governo-draghi
https://tg24.sky.it/politica/2022/07/16/ministri-movimento-5-stelle-governo-draghi
https://tg24.sky.it/politica/2022/07/16/crisi-governo-simulazioni-risultati-elezioni
https://tg24.sky.it/politica/2022/07/16/crisi-governo-draghi-perche
https://tg24.sky.it/politica/2022/07/15/crisi-governo-draghi-ultime-notizie
https://tg24.sky.it/politica/2022/07/15/crisi-governo-draghi
https://tg24.sky.it/politica/2022/07/15/crisi-governo-ritiro-ministri-m5s-patuanelli
https://tg24.sky.it/politica/2022/07/15/crisi-governo-italia-mosca
[.....]
CodePudding user response:
It seems that you wanna work with different lists
but you should avoid this, in case some information is not available they become different length. So try to scrape all information in one go and store it in more structured way.
To get the links you could select them directly:
soup.find_all('a', {'class': 'c-card'})
or if you come frome your title use .find_previous('a').get('href')
on your element:
data = []
for e in soup.find_all('h2', {'class': 'c-card__title'}):
data.append({
'title': e.get_text(strip=True),
'url':e.find_previous('a').get('href')
})
data
would look like:
[{'title': 'Letta: "Draghi continui". Salvini: minacce le lascio a signori del No', 'url': 'https://tg24.sky.it/politica/2022/07/16/crisi-governo-draghi'}, {'title': 'Governo Draghi: chi sono i ministri, vice e sottosegretari del M5S', 'url': 'https://tg24.sky.it/politica/2022/07/16/ministri-movimento-5-stelle-governo-draghi'}, {'title': 'Crisi di governo, cosa ha portato Draghi a volersi dimettere', 'url': 'https://tg24.sky.it/politica/2022/07/16/crisi-governo-draghi-perche'}, {'title': 'Crisi governo: se si andasse al voto ora come finirebbe? LE GRAFICHE', 'url': 'https://tg24.sky.it/politica/2022/07/16/crisi-governo-simulazioni-risultati-elezioni'}, {'title': 'Governo Draghi, le ultime notizie sulla crisi aperta da Conte e M5S', 'url': 'https://tg24.sky.it/politica/2022/07/15/crisi-governo-draghi-ultime-notizie'}, {'title': 'Governo in bilico, Draghi deciso a lasciare e partiti nel caos', 'url': 'https://tg24.sky.it/politica/2022/07/15/crisi-governo-draghi'}, {'title': 'Patuanelli: "Ritiro ministri M5S? Dimissionario è il governo"', 'url': 'https://tg24.sky.it/politica/2022/07/15/crisi-governo-ritiro-ministri-m5s-patuanelli'},...]
Note: In newer code avoid old syntax findAll()
instead use find_all()
- For more take a minute to check docs
Example
Scrape all information and display as DataFrame:
import requests
from bs4 import BeautifulSoup
import pandas as pd
response = requests.get('https://tg24.sky.it/politica')
soup = BeautifulSoup(response.text)
data = []
for a in soup.find_all('a', {'class': 'c-card'}):
response = requests.get(a.get('href'))
asoup = BeautifulSoup(response.text)
data.append({
'url': a.get('href'),
'title': a.h2.get_text(strip=True),
'content': asoup.article.get_text(strip=True)
})
pd.DataFrame(data)
Output
Texts of content somewhat shortened for clarity
url | title | content | |
---|---|---|---|
0 | https://tg24.sky.it/politica/2022/07/16/crisi-governo-draghi | Letta: "Draghi continui". Salvini: minacce le lascio a signori del No | Crisi Governo, Letta: "Draghi continui". Salvini: "Minacce le lascio ai signori del No"Politica16 lug 2022 - 13:43©AnsaIl segretario dem: "Italia non vuole il voto il 25 settembre". Renzi attacca: "Non ci rassegnamo alla catastrofe voluta da Giuseppe Conte". La Lega critica Letta: "Divide maggioranza, poi chiede unità". Intanto 11 sindaci chiedono al premier di andare avantiascolta articoloCondivi |
1 | https://tg24.sky.it/politica/2022/07/16/ministri-movimento-5-stelle-governo-draghi | Governo Draghi: chi sono i ministri, vice e sottosegretari del M5S | Governo Draghi: chi sono i 9 ministri, vice e sottosegretari del Movimento 5 Stelle. FOTOPoliticafotogallery16 lug 2022 - 07:0010 foto©AnsaIn attesa di mercoledì 20 luglio, quando il presidente del Consiglio riferirà in Aula sulla crisi politica delle ultime ore, sono in molti dentro il M5S a chiedere l’uscita dei membri pentastellati dell’esecutivo. Dal capo delegazione Stefano Patuanelli a Carlo |
2 | https://tg24.sky.it/politica/2022/07/16/crisi-governo-simulazioni-risultati-elezioni | Crisi governo: se si andasse al voto ora come finirebbe? LE GRAFICHE | Crisi governo: se si andasse al voto ora come finirebbe? LE GRAFICHEPoliticafotogallery16 lug 2022 - 06:3013 fotoYouTrend e Cattaneo Zanetto & CoCosa accadrebbe se si andasse al voto oggi con il Rosatellum? YouTrend e Cattaneo Zanetto & Co hanno condotto una simulazione elettorale con tre scenari: nel primo Pd e M5S sono alleati, nel secondo corrono separati, nel terzo c’è un campo largo composto |
3 | https://tg24.sky.it/politica/2022/07/16/crisi-governo-draghi-perche | Crisi di governo, cosa ha portato Draghi a volersi dimettere | Crisi di governo, cosa succede: perché Draghi vuole dimettersiPoliticafotogallery16 lug 2022 - 06:3013 foto©AnsaSecondo il premier "la maggioranza di unità nazionale che ha sostenuto questo governo dalla sua creazione non c'è più". Mentre si attende il suo intervento alle Camere di mercoledì prossimo, circolano voci secondo cui le dimissioni - respinte da Mattarella - sarebbero irrevocabili. Come |
...