Sandrine Henry
Data Science Portfolio
Data Science Portfolio
J'aime lire. Des livres,de la presse, des magazines. J'adore faire de la veille et j'apprécie par dessus tout partager mes trouvailles, faire de la curation. Grâce au web, on peut aujourd'hui accéder à des journaux, magazines etc... du monde entier qu'il était difficile de trouver en version papier.
Pour ce projet de Webscraping, j'ai choisi de scraper 2 sites de médias web : Lily et Nylon.
import pandas as pd
from bs4 import BeautifulSoup
import requests
import re
word = input("Tapez un mot : ")
url_lily = f'https://www.thelily.com/tag/{word}/'
url_nylon = f'https://nylon.com/search/?q={word}'
html_lily = BeautifulSoup(requests.get(url_lily).content)
nylon_html=BeautifulSoup(requests.get(url_nylon).content)
Mise en forme des données scrappées
lily_card=html_lily.find_all('div', class_='card-content align-items-start flex-container-row justify-space-between flex-mobile-column')
lily_article =[]
for x in lily_card:
a=x.find_all('a')
h3 = x.find_all('h3')
lily_article.append([a,h3])
df_lily = pd.DataFrame(lily_article)
df_lily.columns=['titre','auteur']
df_lily['theme']=df_lily['titre']
def cleandf(a):
return '|'.join([x.text.strip() for x in a])
dfcol=['titre','auteur']
for col in dfcol:
df_lily[col]=list(map(cleandf, df_lily[col]))
def linkdf(b):
return '|'.join([x.get('href') for x in b])
df_lily['theme']=list(map(linkdf, df_lily['theme']))
link = lambda a:'https://www.thelily.com'+str(a)
df_lily['theme']=list(map(link,df_lily['theme']))
df_lily['link'] = df_lily['theme'].str.split('|').str[0]
df_lily['theme'] = df_lily['titre'].str.split('|').str[1]
df_lily['titre'] = df_lily['titre'].str.split('|').str[2]
df_lily['accroche'] = df_lily['auteur'].str.split('|').str[0]
df_lily['date'] = df_lily['auteur'].str.split('|').str[2]
df_lily['auteur'] = df_lily['auteur'].str.split('|').str[1]
df_lily['source'] = 'The Lily'
df_lily = df_lily[['source', 'theme','titre','auteur','accroche','date','link',]]
df_lily.head(3)
nylon_card=nylon_html.find_all('div', class_='widget')
card = [x.find_all('article') for x in nylon_card]
nylon_article=[y.find_all(['a','span'])for x in card for y in x]
df_nylon = pd.DataFrame(nylon_article)
df_nylon = df_nylon.rename(columns={0: 'theme',1:'link',2:'titre',3:'auteur',4:'date'})
df_nylon['source']='nylon'
df_nylon['accroche']=''
dfcol=['theme','titre','auteur','date']
for col in dfcol:
df_nylon[col]=([x.text.strip() for x in df_nylon[col]])
df_nylon['link'] = [x.get('href') for x in df_nylon['link']]
df_nylon = df_nylon[['source','theme','titre','auteur','accroche','date','link']]
df_nylon.head(3)
df_search_word = df_lily.append(df_nylon)
df_search_word
df_search_word.to_json('search_word_result.json', orient='records')