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

Réseau/Web Python Discussion :

Scrapping - Crawling - Python


Sujet :

Réseau/Web Python

  1. #1
    Futur Membre du Club
    Scrapping - Crawling - Python
    Bonjour à tous,

    Alors voilà mon problème. J'ai codé un programme de scrapping qui me récupère tout les commentaires de plusieurs pages d'un site internet. Pour ça je dois déclarer en début de mon code une liste qui prend les différentes url des pages du site à scrapper. Voilà le code :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    wiki = ["https://pubpeer.com/publications/E9F28E30E9C0770756D5FB85E77785", 
            "https://pubpeer.com/publications/ADBF355D36B1330508799A817D54A8",
            "https://pubpeer.com/publications/7EB3AD6E01A963F259264CF52FC6AE",
            "https://pubpeer.com/publications/F51E6986DA40F0DF5A5572CCA4E84B#3",
            "https://pubpeer.com/publications/6622AE15F8F3A5A8A6ACDB0F78EC76#5",
            "https://pubpeer.com/publications/55F676FA8BAD7D7B631AB941F96B63#17",
            "https://pubpeer.com/publications/D569C47E7BE09AD9D238BA526E06CA#30",
            ]
    z =0
    while z < len(wiki):
     
    	"""Parsing primaire du code afin de récupérer le contenu de la balise de commentaire"""			
    	page = urlopen(wiki[z])
    	soup = BeautifulSoup(page, "html.parser")
    	comment=soup.find('div', class_='vertical-container light-timeline no-margins')
     
    	"""On transforme mon objet soup en str"""
    	comment=str(comment)
     
    	"""On enlève les entités"""
    	comment = html.unescape(comment)
     
    	"""Je découpe mon objet qui devient donc une liste de str"""
    	comment = decoupe1(comment)
     
    	"""Je redécoupe chaque str (élément de ma liste), j'ai donc une liste de liste (2 niveau)"""
    	i=0
    	while i < len(comment):
    		comment[i] = decoupe2(comment[i])
    		i +=1
     
    	"""Insérer un nettoyage de [0][0] et [-1][-1]"""
    	comment[0][0] = comment[0][0][95:106]
    	comment[-1][-1] = comment[-1][-1][0:20]
     
     
    	"""J'extrait les données"""
    	for i, elmt in enumerate(comment):
    		comment[i] = extraction(comment[i])
     
     
    	"""J'ai donc maintenant une liste 'comment' contenant n comment[0] qui sont aussi des listes contenant 8 variables de type (str)"""
    	df = 'df%s' % z
    	df = pd.DataFrame(comment, columns=['id', 'inner_id', 'commentaire', 'created_at', 'user', 'username', 'photo_url', 'status', 'peeriodical_user', 'email', 'is_admin', 'rejected'])
     
     
    	"""J'exporte en .csv pour faire le traitement avec R"""
    	filename = 'data%s.csv' % z
    	df.to_csv(filename, index=True, encoding='utf-8')
     
    	z += 1
     
    	time.sleep(0.5)


    J'aimerais que la liste wiki soit automatisé (que mon code 'crawl' dans le site pour récupérer les url) sans devoir faire un copier coller de toutes les url du site.

    Je vous remercie

  2. #2
    Expert éminent sénior
    Salut,

    Citation Envoyé par jo_dlbn Voir le message
    J'aimerais que la liste wiki soit automatisé (que mon code 'crawl' dans le site pour récupérer les url) sans devoir faire un copier coller de toutes les url du site.
    C'est éventuellement à récupérer sur une des pages sur le site (et regarder comment il est construit pour y récupérer des infos, c'est votre boulot, et il n'a rien à voir avec la programmation).

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

  3. #3
    Expert éminent
    Salut,

    J'ai téléchargé la page https://pubpeer.com/publications/ et j'y ai trouvé un json tout prêt à l'emploi.
    [code]
    >>> import json
    >>> with open("index.html", "rb") as inf:
    ... content = inf.read()
    ...
    >>> data = json.loads(content)
    >>> data.keys()
    dict_keys(['data', 'meta'])
    >>> data['data']
    [{'title': 'Administration of cardiac stem cells in patients with ischemic cardiomyopathy: the SCIPIO trial: surgical aspects and interim analysis of myocardial function and viability by magnetic resonance', 'authors': 'Atul R Chugh, Garth M Beache, John H Loughran, Nathan Mewton, Julius B Elmore, Jan Kajstura, Patroklos Pappas, Antone Tatooles, Marcus F Stoddard, Joao A C Lima, Mark S Slaughter, Piero Anversa, Roberto Bolli', 'identifiers': {'pubmed': '22965994', 'doi': '10.1161/CIRCULATIONAHA.112.092627'}, 'url': 'https://pubpeer.com/publications/E7226F9CC1D9A87B1C2E61F1AF649A', 'total_comments': 2, 'commenters': 'Barydia Pulverosa, Tabebuia Rosea', 'last_commented_at': '2018-11-05 10:11', 'published_at': '2012-09-11'}, {'title': 'Specialized and spatially organized coding of sensory, motor, and cognitive variables in midbrain dopamine neurons', 'authors': 'Ben Engelhard, Joel Finkelstein, Julia Cox, Weston Fleming, Hee Jae Jang, Sharon Ornelas, Sue Ann Koay, Stephan Thiberge, Nathaniel Daw, David Tank, Ilana Witten', 'identifiers': {'doi': '10.1101/456194'}, 'url': 'https://pubpeer.com/publications/B2A004701684A5174BCF861F3E21D2', ......................... [/code]

    Simple non ?

  4. #4
    Futur Membre du Club
    Merci mais dans le json ya que trente articles (donc trentes pages) moi j'aimerai récupérer toutes les pages dans le sous dossiers du site https://pubpeer.com/publications qui sont identifié par un code qui représente un article (donc une page)

    Comme par exemple https://pubpeer.com/publications/E7226F9CC1D9A87B1C2E61F1AF649A

    Merci beaucoup

  5. #5
    Futur Membre du Club
    Requests HTTP - Aspiration - Crawling
    Bonjour à tous,

    Je cherche à récupérer tout les identifiants (30 caractères alphanumériques - il me semble que c'est uniquid) qui correspondent à des pages url dans un sous-dossier du site

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    wiki = ["https://lesite.com/dossier/E9F28E30E9C0770756D5FB85E77785",
            "https://lesite.com/dossier/7B8DDC913375F15C078F677F20594F",
            "https://lesite.com/dossier/94ED5E6C46D3073641BBB288518144",
            "https://lesite.com/dossier/FC11E3C70B0A34A86BB72DFDAF314B",
            "https://plesite.com/dossier/7B8DDC913375F15C078F677F20594F",
            "https://lesite.com/dossier/94ED5E6C46D3073641BBB288518144",
            "https://lesite.com/dossier/FC11E3C70B0A34A86BB72DFDAF314B",
            "https://lesite.com/dossier/E12FEC4CA1E19CE2F11353D5DDDD4A",
            "https://lesite.com/dossier/BFC94721BD4BFDCC08C3F9D57361CA",
            "https://lesite.com/dossier/3B78FDAC43495752BE22E4182F04BD#2",
            "https://lesite.com/dossier/0C9309BDDF091E165990F63692B4E1#7"
            ]


    J'ai essyé avec le module requests en passant des paramètres à mon url

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    payload = {'key1': 'value1', 'key2': 'value2'}
    r = requests.get("https://lesite.com/dossier/", params=payload)


    Mais c'est justement les paramètres que je recherche et je suis à d'idée...

    J'imagine qu'il faudrait faire une succession de requete au serveur qui gere la base de données PHP afin qu'il me renvoie l'url et après je pourrais récupérer l'identifiant avec une regex simple.

    Je vous remercie tous

  6. #6
    Membre du Club
    oui
    et sans regex le résultat :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    ID = "https://lesite.com/dossier/E9F28E30E9C0770756D5FB85E77785".replace("https://lesite.com/dossier/","")

  7. #7
    Expert éminent sénior
    Salut,

    Citation Envoyé par jo_dlbn Voir le message
    Mais c'est justement les paramètres que je recherche et je suis à d'idée...
    On ne va pas les inventer et vous pouvez les trouver vous même en faisant cette requête avec votre navigateur Web.

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

  8. #8
    Futur Membre du Club
    Ok j'ai dû mal m'exprimer

    ya pas loin de 6000 pages de ce type http://lesite.com/dossier/IDENTIFIANT et donc j'aimerais automatiser la récupération de ces identifiants

    Je peux pas faire 6000 requêtes HTTP dans mon navigateur mais avec une boucle python oui (en mettant time.sleep() pour éviter de me faire jeter par le serveur) ;D

    Grosso modo j'aimerais que mon code scan http://lesite.com/dossier/ pour y récupérer les url

    Merci

  9. #9
    Expert éminent sénior
    Citation Envoyé par jo_dlbn Voir le message
    Grosso modo j'aimerais que mon code scan http://lesite.com/dossier/ pour y récupérer les url
    Vous aviez déjà ouvert une discussion à ce sujet à laquelle on vous a répondu: étudier votre site Web pour savoir comment récupérer ces identifiants, c'est pas de la programmation Python et pas un travail qu'on fera à votre place.
    Après si vous avez trouvé une démarche qui permette de... et que vous rencontrez des difficultés pour le coder en Python, pourquoi pas venir ici et demander de l'aide. Mais vous n'en êtes pas encore là.

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

###raw>template_hook.ano_emploi###