Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Futur Membre du Club
    Scrapping - Commentaires - Python- BeautifulSoup
    Salut à tous,

    Dans le cadre de mon mémoire je dois récupérer la base de données des commentaires (anonymes qui évaluent des articles scientifiques) d'un site internet. Je suis nouveau sur Python et j'utilise urllib2 et BeatifulSoup afin donc de scrapper les commentaires que je trouve dans une balise HTML <div>. Jusqu'ici pas de problème.

    Le problème est que je récupére les commentaires d'une manière pas du tout structurés comme sur le site (avec le pseudo du commentateur, la date...) mais je récupére tout les commentaires dans une seule liste, tous les commentaires avec leur métadonnées sont alignés. De plus comme certains commentaires contiennent des images je récupère des données qui ressemble à cela : "id&quot;:131952,&quot;updatable_type&quot;:&quot;comments&quot;,&quot;created_at&quot;:&quot;2018-02-22 06:45:39&quot;,&quot;updated_at&quot;:&quot;2018-02-22 06:45:39&quot;}]},{&quot;id&quot;:132125,&quot;inner_id&quot;:5,&quot;html&quot;:&quot;&lt;p&gt;The correction removed published figures and replaced them with new data. Above flagged concerns were not addressed at all.\nSci-Hub allows you to see the accepted author's manuscript. I modified the corrigenda panels to insert corresponding accepted figures. You can see that Fig 1A used to be different from what was then published, and now removed and replaced by correction. &lt;a href=\&quot;https:\/\/pubpeer.com\/storage\/image-1519723825915.PNG\&quot; target=\&quot;_self\&quot;&gt;&lt;img"

    Voilà, j'espère que j'ai plutôt bien expliqué mon problème afin que vous m'éclairiez sur la voie à suivre afin de récupérer des données que je puisse structurer ensuite dans des listes et des dictionnaires. A la fin j'aimerais obtenir un dataframe avec les commentaires et leurs métadonnées.

    Merci à tous



    Je vous remercie

  2. ###raw>post.musername###
    Membre habitué
    Salut.

    Déjà il faudait montrer un bloc de commentaire complet et nous dire ce que tu souhaites récupérer dans un bloc.

    Si je transforme les entités et supprime les \, j'obtiens :

    '"id":131952,"updatable_type":"comments","created_at":"2018-02-22 06:45:39","updated_at":"2018-02-22 06:45:39"}]},{"id":132125,"inner_id":5,"html":"<p>The correction removed published figures and replaced them with new data. Above flagged concerns were not addressed at all.\nSci-Hub allows you to see the accepted author\'s manuscript. I modified the corrigenda panels to insert corresponding accepted figures. You can see that Fig 1A used to be different from what was then published, and now removed and replaced by correction. <a href="https://pubpeer.com/storage/image-1519723825915.PNG" target="_self"><img"'
    Donc à partir de ça, difficile d'extraire quoique ce soit, puisque le paragraphe n'est pas complet.
      2  1

  3. #3
    Futur Membre du Club
    Merci pour votre réponse. Comment avez-vous fait pour transformer les entités HTML avec Python?? Ca m'aiderait beaucoup pour mettre de l'ordre dans tout ca

    Sinon, voilà à quoi ressemble un bloc commentaire j'aimerais récupérer toutes les informations (pseudo, date et commentaires)


    Merci

  4. #4
    Membre habitué
    Citation Envoyé par jo_dlbn Voir le message
    Comment avez-vous fait pour transformer les entités HTML avec Python?? Ca m'aiderait beaucoup pour mettre de l'ordre dans tout ca
    J'ai fait ça à l'arrache avec le dictionnaire html5 de html.entities.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> from html.entities import html5 as entites
    >>> html = '&lt;p&gt;paragraphe&lt;/p&gt;'
    >>> for c, v in entites.items() :
    ...     try :
    ...         html = html.replace('&'+c, v)
    ...     except:
    ...         continue
    ... 
    >>> html
    '<p>paragraphe</p>'


    Tu peux aussi regarder du côté de html.parser.
    Mais je suppose qu"avec beautifulsoup, il doit y avoir moyen de récupérer le contenu désiré.
    Le temps ronge l'amour comme l'acide.

  5. #5
    Expert éminent sénior
    Citation Envoyé par bistouille Voir le message
    J'ai fait ça à l'arrache avec le dictionnaire html5 de html.entities.
    Plus simple:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> s = '&lt;p&gt;paragraphe&lt;/p&gt;'
    >>> import html
    >>> html.unescape(s)
    '<p>paragraphe</p>'
    >>>


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre habitué
    En effet
    Le temps ronge l'amour comme l'acide.

  7. #7
    Futur Membre du Club
    Merci pour le tuyau!!

    Pour revenir a mon problème, j'ai mes blocs de commentaire en tant qu'élément (chaine de caractère) dans une liste et j'aimerais recupéré des informations tel que "id":, "inner_id":, "created_at": "user":...
    Voilà a quoi ressemble un bloc de commentaire (un élément de ma liste ) :liste_V1[1] me donne :

    id":125965,"inner_id":2,"html":"<p>\"Elsewhere on the internet\" not being a proper reference -one very similar to \"data not shown\"-, is this comment really useful or is it just one instance of \"author bashing\"? Feeling uncomfortable...<\/p>","markdown":"\"Elsewhere on the internet\" not being a proper reference -one very similar to \"data not shown\"-, is this comment really useful or is it just one instance of \"author bashing\"? Feeling uncomfortable...","visible":true,"user_alias":null,"type":"pubpeer","link":null,"updatable":false,"editable":false,"is_from_author":false,"important":false,"is_accepted":true,"is_disabled":false,"created_at":"2017-09-25 21:25:11","accepted_at":"2017-09-26 07:44:05","updated_at":"2017-09-26 07:44:05","deleted_at":null,"user":{"id":25410,"username":"acer ibericum","first_name":"acer","last_name":"ibericum","verified":0,"active":1,"is_admin":false,"suspend":0,"author_id":null,"reported":0,"rejected":0,"disabled":1,"accepted":2,"created_at":"2017-08-21 12:27:43","updated_at":"2018-04-17 19:22:07","email":null,"name":"acer ibericum","photo_url":"https:\/\/www.gravatar.com\/avatar\/d41d8cd98f00b204e9800998ecf8427e.jpg?s=200&d=mm","uses_two_factor_auth":false,"two_factor_reset_code":null,"current_team_id":null,"stripe_id":null,"current_billing_plan":null,"billing_state":null,"vat_id":null,"trial_ends_at":null,"last_read_announcements_at":null,"peeriodical_user":0,"status":"anonymous","display_name":"Acer Ibericum","teams":[],"tax_rate":0},"updates":[{"id":69444,"action":"ACCEPTED","content":null,"user_id":null,"updatable_id":125965,"updatable_type":"comments","created_at":"2017-09-26 07:44:05","updated_at":"2017-09-26 07:44:05" Merci

###raw>template_hook.ano_emploi###