Ceci est ma première tentative d'utilisation de la programmation pour quelque chose d'utile, alors s'il vous plaît gardez avec moi. La rétroaction constructive est très appréciée :)Création d'une liste d'URL à partir d'un site Web spécifique
Je travaille à la construction d'une base de données avec tous les communiqués de presse du Parlement européen. Jusqu'à présent, j'ai construit un grattoir qui peut récupérer les données que je veux d'une URL spécifique. Cependant, après avoir lu et consulté quelques tutoriels, je n'arrive toujours pas à comprendre comment créer une liste d'URL contenant tous les communiqués de presse de ce site spécifique. Peut-être que c'est lié à la façon dont le site Web est construit, ou je suis (probablement) juste manquant une chose évidente qu'un programme expérimenté réaliserait tout de suite, mais je ne sais pas vraiment comment procéder à partir d'ici.
Ceci est l'URL de départ: http://www.europarl.europa.eu/news/en/press-room
Voici mon code:
links = [] # Until now I have just manually pasted a few links
# into this list, but I need it to contain all the URLs to scrape
# Function for removing html tags from text
TAG_RE = re.compile(r'<[^>]+>')
def remove_tags(text):
return TAG_RE.sub('', text)
# Regex to match dates with pattern DD-MM-YYYY
date_match = re.compile(r'\d\d-\d\d-\d\d\d\d')
# For-loop to scrape variables from site
for link in links:
# Opening up connection and grabbing page
uClient = uReq(link)
# Saves content of page in new variable (still in HTML!!)
page_html = uClient.read()
# Close connection
uClient.close()
# Parsing page with soup
page_soup = soup(page_html, "html.parser")
# Grabs page
pr_container = page_soup.findAll("div",{"id":"website"})
# Scrape date
date_container = pr_container[0].time
date = date_container.text
date = date_match.search(date)
date = date.group()
# Scrape title
title = page_soup.h1.text
title_clean = title.replace("\n", " ")
title_clean = title_clean.replace("\xa0", "")
title_clean = ' '.join(title_clean.split())
title = title_clean
# Scrape institutions involved
type_of_question_container = pr_container[0].findAll("div", {"class":"ep_subtitle"})
text = type_of_question_container[0].text
question_clean = text.replace("\n", " ")
question_clean = text.replace("\xa0", " ")
question_clean = re.sub("\d+", "", question_clean) # Redundant?
question_clean = question_clean.replace("-", "")
question_clean = question_clean.replace(":", "")
question_clean = question_clean.replace("Press Releases"," ")
question_clean = ' '.join(question_clean.split())
institutions_mentioned = question_clean
# Scrape text
text_container = pr_container[0].findAll("div", {"class":"ep-a_text"})
text_with_tags = str(text_container)
text_clean = remove_tags(text_with_tags)
text_clean = text_clean.replace("\n", " ")
text_clean = text_clean.replace(",", " ") # Removing commas to avoid trouble with .csv-format later on
text_clean = text_clean.replace("\xa0", " ")
text_clean = ' '.join(text_clean.split())
# Calculate word count
word_count = len(text_clean.split())
word_count = str(word_count)
print("Finished scraping: " + link)
time.sleep(randint(1,5))
f.write(date + "," + title + ","+ institutions_mentioned + "," + word_count + "," + text_clean + "\n")
f.close()
html ont méthode actuelle pour urls puting, en html, nous avons: src, href et de l'action pour tous les liens, pour src => ('script', 'img', 'source', 'video', ' audio ',' embed ',' iframe ',' input ',' track '), pour href => (' a ',' link ',' area ',' base ') et pour l'action => (' forme '), vous devez d'abord extraire ces balises, puis extraire leur chaque src, href et action sub_tag (sans rien analyser ou supprimer les chaînes sales), avec cette méthode, vous pouvez extraire toutes les URL html standard, vous pouvez le faire avec le module beautifulsoup et deux fors! – DRPK