Comment puis-je obtenir toutes les catégories mentionnées sur chaque page d'annonce du même site Web " https: //www.sfma.org.sg/member/category ". Par exemple, lorsque je choisis la catégorie de boissons alcoolisées sur la page mentionnée ci-dessus, les annonces mentionnées sur cette page ont la catégorie des informations telles que ceci: - Comment puis-je extraire les catégories mentionnées ici avec même variable. p> Le code que j'ai écrit pour cela est: - p> mais il produit la sortie ci-dessous qui sont tous les liens de la page et pas le texte avec dans le HREF: - p> ['http://www.sfma.org.sg/about/singapore-food-manufacturers-association',
'http://www.sfma.org.sg/about/council-members',
'http://www.sfma.org.sg/about/history-and-milestones',
'http://www.sfma.org.sg/membership/',
'http://www.sfma.org.sg/member/',
'http://www.sfma.org.sg/member/alphabet/',
'http://www.sfma.org.sg/member/category/',
'http://www.sfma.org.sg/resources/sme-portal',
'http://www.sfma.org.sg/resources/setting-up-food-establishments-in-singapore',
'http://www.sfma.org.sg/resources/import-export-requirements-and-procedures',
'http://www.sfma.org.sg/resources/labelling-guidelines',
'http://www.sfma.org.sg/resources/wsq-continuing-education-modular-programmes',
'http://www.sfma.org.sg/resources/holistic-industry-productivity-scorecard',
'http://www.sfma.org.sg/resources/p-max',
'http://www.sfma.org.sg/event/',
.....]
4 Réponses :
Les liens que vous recherchez sont évidemment peuplés par un script (recherchez la réponse de https://www.sfma.org.sg/member/category/Manufacturier dans chrome-> inspect-> réseau). Si vous regardez la page, vous verrez le script le charger. Au lieu de racler des liens, grattez des scripts, vous aurez la liste. Puisque le format de lien est connu, plugin les valeurs de JSON. Et voilà! Voici le code de démarreur avec lequel travailler. Vous pouvez déduire le reste.
import requests from bs4 import BeautifulSoup page = "https://www.sfma.org.sg/member/category/manufacturer" information = requests.get(page) soup = BeautifulSoup(information.content, 'html.parser') links = [soup.find_all('script')]
Vous devez obtenir les valeurs Permalink à partir du script à l'aide de Regex et rejoindre l'URL de base. Voici l'échantillon
import re from bs4 import BeautifulSoup from urllib.parse import urljoin base = 'https://www.sfma.org.sg/member/category/manufacturer' script_txt = """<script> var tmObject = {'tmember':[{id:'1',begin_with:'0-9',name:'1A Catering Pte Ltd',category:'22,99',mem_type:'1',permalink:'1a-catering-pte-ltd'},{id:'330',begin_with:'A',name:'A-Linkz Marketing Pte Ltd',category:'3,4,10,14,104,28,40,43,45,49,51,52,63,66,73,83,95,96',mem_type:'1',permalink:'a-linkz-marketing-pte-ltd'},{id:'318',begin_with:'A',name:'Aalst Chocolate Pte Ltd',category:'30,82,83,84,95,97',mem_type:'1',permalink:'aalst-chocolate-pte-ltd'},{id:'421',begin_with:'A',name:'ABB Pte Ltd',category:'86,127,90,92,97,100',mem_type:'3',permalink:'abb-pte-ltd'},{id:'2',begin_with:'A',name:'Ace Synergy International Pte Ltd',category:'104,27,31,59,83,86,95',mem_type:'1',permalink:'ace-synergy-international-pte-ltd'} </script>""" soup = BeautifulSoup(script_txt) txt = soup.script.get_text() pattern = re.compile(r'permalink:\'(.*?)\'}') permlinks = re.findall(pattern, txt) for i in permlinks: href = "../info/{{permalink}}" href = href.split('{')[0]+i print(urljoin(base, href)) https://www.sfma.org.sg/member/info/1a-catering-pte-ltd https://www.sfma.org.sg/member/info/a-linkz-marketing-pte-ltd https://www.sfma.org.sg/member/info/aalst-chocolate-pte-ltd https://www.sfma.org.sg/member/info/abb-pte-ltd https://www.sfma.org.sg/member/info/ace-synergy-international-pte-ltd
Je suis en fait nouveau à Python, alors pardonnez-moi si cela semble être une question muette, la variable script_txt ne contient que le script partiel, et non pour toutes les annonces de la page, comment puis-je obtenir un script entier afin que je puisse obtenir toutes les URL , Merci pour l'aide!
Vous devez extraire le contenu du script des données rampées. Vous avez tout votre contenu dans la variable soupe code>. Vous pouvez utiliser
Soupe.script.get_text () code> pour récupérer le texte du script
Si vous voulez simplement les liens des résultats que vous avez déjà postés, vous pouvez obtenir cela comme suit: sortie: p> https://www.sfma.org.sg/member/info/1a-catering-pte-ltd
https://www.sfma.org.sg/member/info/a-linkz-marketing-pte-ltd
https://www.sfma.org.sg/member/info/aalst-chocolate-pte-ltd
https://www.sfma.org.sg/member/info/abb-pte-ltd
https://www.sfma.org.sg/member/info/ace-synergy-international-pte-ltd
https://www.sfma.org.sg/member/info/acez-instruments-pte-ltd
https://www.sfma.org.sg/member/info/acorn-investments-holding-pte-ltd
https://www.sfma.org.sg/member/info/ad-wright-communications-pte-ltd
https://www.sfma.org.sg/member/info/added-international-s-pte-ltd
https://www.sfma.org.sg/member/info/advance-carton-pte-ltd
https://www.sfma.org.sg/member/info/agroegg-pte-ltd
https://www.sfma.org.sg/member/info/airverclean-pte-ltd
...
Merci beaucoup !! Cela m'a beaucoup aidé !!
Si vous voulez que les listes de fabricants ont d'abord consulter la page et vérifier Combien de liens il devrait y avoir: p> En assurant que le sélecteur CSS a la classe du parent Si nous utilisons simplement cela sur le HTML renvoyé à partir de Cependant, tous les liens (pour toutes les sélections de liste déroulante - non seulement La fabrication) est présente dans un dictionnaire JavaScript, dans une balise code> code>, que nous pouvons voir le début de ci-dessous: p> Nous pouvons réégionner cet objet à l'aide de l'expression suivante: p> Maintenant, lorsque nous inspections la chaîne retournée, nous pouvons voir que nous avons des clés non cotées qui peuvent poser sa pose MS Si nous souhaitons lire ce dictionnaire avec une bibliothèque JSON: P> < img src = "https://i.stack.imgur.com/astdwa.png" alt = "Entrez la description de l'image ici"> p> Nous pouvons utiliser le Enfin, nous savons que nous avons toutes les annonces et non seulement fabricants; Inspection des balises dans le HTML d'origine Nous pouvons déterminer que la balise code> code> est associée au code de groupe Donc, j'extrise à la fois les liens et les groupes de l'objet JSON comme une liste de tuples. J'ai divisé les groupes sur le "," afin que je puisse utiliser dans em> filtrer pour le code de fabrication approprié: p> Vérification du dernier len de la Liste Nous pouvons obtenir notre cible donc, nous avons ul Code> Ie
.w3-ul code> Nous limitons uniquement les liens appropriés lorsque nous ajoutons dans le sélecteur de classe enfant de .plink. Donc, nous avons
240 code> sur la page. P>
Demandes code> Nous trouverions nous sommes loin de cela, car de nombreux liens sont ajoutés de manière dynamique et ne sont donc pas présents avec
demandes code> où JavaScript ne fonctionne pas. p>
hjson Code> Bibliothèque d'analyse, car cela permettra aux touches non cotées. * PIP INSTALLER HJSON SUB> P>
97 code>. p>
240 code>. P>
all_results code> (toutes les catégories), un moyen de diviser par catégorie, ainsi qu'un exemple fonctionné pour
fabricant p >
Merci beaucoup pour une telle explication détaillée !! Oui, cela donne le bon numéro,
Je pense que je suis devenu fan de ce hjson code>.