Je gratte les résultats de recherche bing en utilisant node et cheerio. Je dois récupérer toutes les valeurs href de deux listes qui ont des ID différents.
$ ("a", ["#b_content", "#b_context"]). each ((index, element) => {const href = $ (element) .attr ("href"); links.push (href);});
Reportez-vous à la capture d'écran ci-jointe pour le code HTML. html
Update2: Je voulais ignorer toute la balise
, mais les solutions que j'ai trouvées ici et ailleurs ignoraient juste cette balise. Toute autre balise
en dessous, qui a une autre ou aucune classe, n'est pas ignorée.
J'ai trouvé un moyen de contourner cela. Je pourrais saisir les balises
qui ont d'autres noms de classe. Consultez le code HTML ici . Je pense utiliser quatre sélecteurs différents pour les quatre premières classes. Comme $ (. B_algo)
ou $ (. B_ans)
. Mais comment puis-je récupérer les deux autres balises
auxquelles plusieurs classes sont associées? Je n'ai pas pu me faire une idée claire des cheerio docs . J'espère que je suis assez clair pour vous les gars! Quelque chose comme $ (. B_ans b_mop)
ne fonctionnait pas. $ ("li [class = b_ans b_mop")
non plus.
3 Réponses :
Essayez ceci,
$("#b_content", "#b_context").each(function(i, elem) { array[i] = { a: $(this).find("a").attr("href") }; });`
Pour sélectionner "li" sauf la classe "b_pag", utilisez li: not (.b_pag)
p >
$ ("# b_content", "b_context") trouvera b_content sous b_context, qui n'existe pas, donc j'obtiens un résultat vide. le "li: not (.b_pag)" est ce que je cherchais. Pouvez-vous me dire où l'écririez-vous exactement dans le code? Je peux saisir les
Voilà, $ ("# b_results"). Find ("li: not (.b_pag)"). Each ((i, el) => {// quelque chose});
J'ai trouvé un moyen de contourner ce problème. J'ai un autre doute cependant. comment puis-je saisir un élément comme celui-ci -
Oui ! Similaire à certaines classes de bootstrap ..
s'il y a un
$ (". a")
, alors il saisit ces deux éléments. existe-t-il un moyen de passer plusieurs classes dans un seul sélecteur? afin que je puisse saisir seulement le deuxième La réponse à cette question a déjà été répondue, vérifiez ceci. lien
pourriez-vous m'aider avec ceci ? @Dipesh
Essayez celui-ci
$ (". b_content li [class! = 'b_pag']"). find ("a"). each ((index, element) => {
const href = $ (élément) .attr ("href");
console.log (href);
});
si vous voulez ignorer la classe, utilisez le sélecteur d'attribut avec la balise correspondante comme ceci li[class!='b_pag' Often
Le! = Fonctionne et le li: not () comme Dipesh Lohani l'a dit ci-dessus ignore également le
-
-
-
Je dois ignorer le tout Essayez plutôt d'utiliser l'API Bing Web Search: https://azure.microsoft.com/en-us/services/cognitive-services/bing-web-search-api/
C'est le meilleur moyen légal d'obtenir les résultats de recherche Bing. Vous pouvez vous inscrire au niveau gratuit de cette API, si vous n'avez pas beaucoup de recherches à faire. Vous pouvez également utiliser le crédit gratuit Azure, que vous recevez lorsque vous rejoignez Azure.
Merci mec. Je vais sûrement le vérifier :)
tous les li contiennent-ils une balise ? consultez mon travail autour. jsfiddle.net/apmnky0b
ouais toutes les balises li ont une balise avec d'autres balises
J'ai vu votre code. Il obtient toutes les balises a sous ol avec b_content comme classe. Je veux ignorer la balise li qui a "b_pag" comme classe. Voir le dernier li dans la capture d'écran. C'est ce que je veux ignorer. Toutes les autres balises li sont nécessaires.
consultez ce code jsfiddle.net/roftsnap