-6
votes

Web gratter URL ne change pas lors de la recherche

J'essaie de Webscreapre https://in.udacy.com/courses/all. J'ai besoin d'obtenir les cours montrés lors de la saisie de la requête de recherche. Par exemple: si je saisis Python, il y a 17 cours comme des résultats.Je besoin de chercher ces cours uniquement. Ici, la requête de recherche n'est pas transmise dans le cadre de l'URL (ne pas obtenir la méthode) .SO Le contenu HTML ne change pas non plus. Ensuite, comment puis-je récupérer ces résultats sans traverser toute la liste des cours. Dans ce code, je récupère tous les liens de cours en obtenant le contenu et le percher du terme de recherche dans ce contenu.Mais cela ne me donne pas le résultat que j'attends.

import requests
from bs4 import BeautifulSoup
from bs4 import BeautifulSoup
from bs4.element import Comment
import urllib.request
from urllib.request import Request, urlopen

def tag_visible(element):
    if element.parent.name in ['style', 'script', 'head', 'title', 'meta', '[document]']:
        return False
    if isinstance(element, Comment):
        return False
    return True


def text_from_html(body):
    soup = BeautifulSoup(body, 'html.parser')
    texts = soup.findAll(text=True)
    visible_texts = filter(tag_visible, texts)  
    return u" ".join(t.strip() for t in visible_texts)

page = requests.get("https://in.udacity.com/courses/all")
soup = BeautifulSoup(page.content, 'lxml')
courses = soup.select('a.capitalize')

search_term = input("enter the course:")
for link in courses:
    #print("https://in.udacity.com" + link['href'])
    html = urllib.request.urlopen("https://in.udacity.com" + link['href']).read()

    if search_term in text_from_html(html).lower():
        print('\n'+link.text)
        print("https://in.udacity.com" + link['href'])


2 commentaires

Bienvenue sur Stackoverflow. Veuillez prendre le temps de lire cet article sur la manière de fournir un exemple minimal, complet et vérifiable et réviser votre question en conséquence. Ces conseils sur Comment poser une bonne question peut également être utile.


@Merin pourquoi avez-vous dépassé ma réponse?


3 Réponses :


0
votes

Lire les tutoriels pour utiliser Demandes (pour la création de demandes HTTP) et Beautifulsoup (pour le traitement HTML). Cela vous apprendra ce que vous devez savoir pour télécharger les pages et extraire les données du HTML.

Vous utiliserez la fonction beauxoup.find_all ( ) Pour localiser tous les éléments

dans la page HTML, avec Classe = Cours-Sommaire-Carte . Le contenu que vous souhaitez est dans ce
et après avoir lu les liens ci-dessus, il devrait être trivial pour que vous puissiez comprendre le reste;)

BTW, un outil utile pour vous, car vous apprenez à procéder à ce que cela vous permettra d'utiliser la fonction "Élément d'inspection" (pour Chrome / Firefox), qui peut être accessible en cliquant avec le bouton droit de la souris sur les éléments du navigateur, qui vous permettra. Pour examiner le code source entourant l'élément qui vous intéresse, vous pouvez obtenir des informations comme la classe ou l'identification, les divs parents, etc. qui vous permettront de le sélectionner dans Beautiful / LXML / etc.


2 commentaires

Je pense qu'il devrait y avoir une meilleure option autre que la belle soupe et les demandes d'extraire les résultats de la recherche


Je pense que si vous lisez plus sur le raclage Web, vous constaterez que c'est probablement la solution la plus simple à votre problème. Vous voudrez peut-être qu'il y ait quelque chose de plus facile, mais c'est à peu près aussi facile que possible pour écrire des scripts pour récupérer HTML et extraire le texte de celui-ci.



2
votes

Utilisation de Demandes et Beautiful : xxx pré>

sortie: p>

AI Programming with Python
Blockchain Developer Nanodegree program
Knowledge-Based AI: Cognitive Systems


2 commentaires

@Merin pourquoi avez-vous dépassé ma réponse?


J'ai essayé la méthode que vous avez suggérée. (En filtrant tous les cours contenant le terme de recherche). Mais cela me donne plus de cours que ceux figurant dans la page Web.Pour, par exemple, lorsque je recherche des cours de Python 17 viennent dans la page Web .mais quand je filtrais plus que 17 ans arrivent.



1
votes

La page d'UDITÉS retourne tous les cours disponibles lorsque vous le demandez. Lorsque vous entrez une recherche, la page filtre simplement les données disponibles. C'est pourquoi vous ne voyez aucune modification à l'URL lors de la saisie d'une recherche. Un chèque à l'aide des outils de développement du navigateur confirme également cela. Cela explique également pourquoi la "recherche" est si rapide.

En tant que tel, si vous recherchez un cours donné, vous devrez simplement filtrer les résultats vous-même. Par exemple: xxx

ceci afficherait tous les cours avec python dans le titre: xxx


0 commentaires