On your way to scraping French forums 🇬🇧¶
Be sure to have read the first tutorial here.
Get pages¶
The construction of the scraper for the forum doctissimo
is actually simpler. Let’s look at the link of the second page of the “pain dos” section as an example:
https://forum.doctissimo.fr/sante/douleur-dos/liste_sujet-2.htm
First I write a function to generate the links including page numbering:
[3]:
links_page = ["https://forum.doctissimo.fr/sante/douleur-dos/liste_sujet-" +
str(i) + ".htm" for i in range(10)]
links_page[:2]
[3]:
['https://forum.doctissimo.fr/sante/douleur-dos/liste_sujet-0.htm',
'https://forum.doctissimo.fr/sante/douleur-dos/liste_sujet-1.htm']
Then I go on with a second function retrieving the threads on each page.
[6]:
from urllib.request import urlopen # standard python module
from bs4 import BeautifulSoup
from urllib.error import HTTPError
def get_post_links(link):
try:
html = urlopen(link)
except HTTPError as e:
print("text url not valid")
soup = BeautifulSoup(html, "html.parser")
temp = soup.find_all(scope="row")
test = set()
for post in temp:
if post.find('a'):
test.add(post.find('a').get('href'))
return test
url = "https://forum.doctissimo.fr/sante/douleur-dos/liste_sujet-2.htm"
links_threads = get_post_links(url)
list(links_threads)[0]
[6]:
'https://forum.doctissimo.fr/sante/douleur-dos/osteopathie-sujet_165606_1.htm'
Scrape interactions/posts¶
Now it’s just a matter of scrape the posts from the first page of each thread. It is quite straightforward because the text of each post is in a span tag where the itemprop property equals text. The code says a little more about tag structure.
The code block below allows to print:
the author
the publication date and time
the text body
of each post published on https://forum.doctissimo.fr/sante/douleur-dos/osteopathie-sujet_165606_1.htm.
[26]:
def read_html(link):
try:
html = urlopen(link)
except HTTPError as e:
print("text url not valid")
return BeautifulSoup(html, "html.parser")
content = read_html("https://forum.doctissimo.fr/sante/douleur-dos/osteopathie-sujet_165606_1.htm")
for post in content.find_all(class_="md-post__content"):
for meta in post.find_previous("header").find_all("span"):
print(meta.get_text().replace("\n",""))
text = post.find(itemprop="text").get_text()
body = text.replace("\n","")
# replace " with quotes
s = """
post_body = body.replace(s, '"')
print(post_body)
Mélène4822
Mélène4822
06/09/2020 à 18h28
Le lien a été copié dans votre presse-papier
Le lien a été copié dans votre presse-papier
Bonjour à tous,Avez-vous déjà eu recours à un ostéopathe pour votre mal de dos ?Et, si oui, en êtes-vous satisfait ?Ou, au contraire, y a-t-il contre-indication ?(J'ai une hernie discale en L5S1, à laquelle s'ajoute un problème de hanche)J'ai rendez-vous avec une ostéopathe demain et je ne suis pas très rassurée même si, paraît-il, elle emploie les méthodes douces actuelles.Merci de vos réponses et bonne soirée à vous
LordMaxence
LordMaxence
20/11/2020 à 16h00
Le lien a été copié dans votre presse-papier
Le lien a été copié dans votre presse-papier
Bonjour,Comme j'ai répondu dans un autre post je ne vais pas faire de doublon. Tu pourras lire si tu veux.L'ostéopathe va t'étirer et te soulager. J'en voyais un pour mes maux de dos. Mais une fois par mois. Trop peu, les douleurs revenaient vite...L'idéal est de s'étirer tous les jours le matin dans le lit. Pas sur un sol dur. Muscles chauds.Et le soir également au début dans le lit pour s'endormir, le temps que les douleurs disparaissent.Et surtout, bien gérer sa respiration afin de se détendre.Pour les étirements du dos, il y a pleins de liens sur le net.Mais au besoin, je peux rechercher pour te donner ceux que je fais. Qui sont basiques pour la plupart.Mais depuis que je m'étire tous les jours, plus de douleur.Bien cordialement.
Perspectives¶
Now it’s up to you to do some corpus analysis :D