0
votes

Mon code Webscraping avec BelleSoup ne dépasse pas la première page

Il ne semble pas dépasser la première page. Qu'est-ce qui ne va pas? De plus, si le mot que vous recherchez est dans le lien, il ne fournira pas la bonne octroi, il affichera 5 sorties avec 5 comme la présence

import requests from bs4 import BeautifulSoup 

for i in range (1,5):

    url = 'https://www.nairaland.com/search/ipob/0/0/0/{}'.format(i)
    the_word = 'is' 
    r = requests.get(url, allow_redirects=False)
    soup = BeautifulSoup(r.content, 'lxml')
    words = soup.find(text=lambda text: text and the_word in text) 
    print(words) 
    count =  len(words)
    print('\nUrl: {}\ncontains {} occurrences of word: {}'.format(url, count, the_word))


3 commentaires

Avec un code correctement indenté, il fait. Je vois 4 séries de résultats.


Changez votre pour en boucle dans pour i in gamme (5):


Vous devez juste prendre à partir de BS4 Importer magnifsoup dans une nouvelle ligne et modifier la boucle pour la boucle pour I dans la plage (6): .


4 Réponses :


1
votes

Si vous souhaitez dépasser les 6 premières pages, modifiez la plage de votre boucle:

for i in range (1,5):    # this will start from the second page, since the second page is indexed at `1`


3 commentaires

Puis changez la plage pour i in gamme (6):


Je veux obtenir les occurrences dans les 6 premières pages. Il affiche les occurrences pour la première page uniquement malgré la modification de la plage (6)


Il me donne le Résultat



0
votes

Pour moi, cela fonctionne bien:

https://www.nairaland.com/search/ipob/0/0/0/0 url
 is somewhere in Europe sending semi nude video on the internet.Are you proud of such groups with such leader?

Url: https://www.nairaland.com/search/ipob/0/0/0/0
contains 110 occurrences of word: is
https://www.nairaland.com/search/ipob/0/0/0/1 url
Notre is a French word; means 'Our"...and Dame means "Lady" So Notre Dame means Our Lady.

Url: https://www.nairaland.com/search/ipob/0/0/0/1
contains 89 occurrences of word: is
https://www.nairaland.com/search/ipob/0/0/0/2 url
How does all this uselessness Help Foolish 

Url: https://www.nairaland.com/search/ipob/0/0/0/2
contains 43 occurrences of word: is
https://www.nairaland.com/search/ipob/0/0/0/3 url
Dumb fuckers everywhere. I thought I was finally going to meet someone that has juju and can show me. Instead I got a hopeless broke buffoon that loves boasting online. Nairaland I apologize on the behalf of this waste of space and time. He is not even worth half of the data I have spent writing this post. 

Url: https://www.nairaland.com/search/ipob/0/0/0/3
contains 308 occurrences of word: is
https://www.nairaland.com/search/ipob/0/0/0/4 url
People like FFK, Reno, Fayose etc have not been touched, it is an unknown prophet that hasn't said anything against the FG that you expect the FG to waste its time on. 

Url: https://www.nairaland.com/search/ipob/0/0/0/4
contains 168 occurrences of word: is
https://www.nairaland.com/search/ipob/0/0/0/5 url
 children send them to prison

Url: https://www.nairaland.com/search/ipob/0/0/0/5
contains 29 occurrences of word: is

Process finished with exit code 0


4 commentaires

J'ai compris le problème, si le mot que vous recherchez est dans le lien, il n'ayera pas d'afficher les résultats corrects. Certains bugs?


Je pense que c'est due au paramètre "texte =". Si vous souhaitez rechercher quelque chose aussi à l'intérieur du lien, vous devez trouver la balise "A", extraire le "href"


Avez-vous essayé de chercher le mot que vous voulez "brutalement" à travers Regex? Si vous utilisez des demandes-html, il est facile de disposer d'un objet de type HTML analysé. Ensuite, vous pouvez rechercher des occurrences avec regex.


Pour trouver un mot avec regex: importe re, all_result = re.findall (re.comple ("votre chaîne"), text_var). All_Result est une liste. Vous pouvez utiliser les éléments à l'intérieur et obtenir une taille avec len ()



0
votes

Essayez:

Url: https://www.nairaland.com/search/afonja/0/0/0/0
contains 30 occurrences of word: afonja

Url: https://www.nairaland.com/search/afonja/0/0/0/1
contains 31 occurrences of word: afonja

Url: https://www.nairaland.com/search/afonja/0/0/0/2
contains 36 occurrences of word: afonja

Url: https://www.nairaland.com/search/afonja/0/0/0/3
contains 30 occurrences of word: afonja

Url: https://www.nairaland.com/search/afonja/0/0/0/4
contains 45 occurrences of word: afonja

Url: https://www.nairaland.com/search/afonja/0/0/0/5
contains 50 occurrences of word: afonja


5 commentaires

Si le mot AFONJA fait partie du lien de recherche, il affichera le bon mot sevensifs


Afin de comprendre votre problème, vous devriez clarifier: 1) Quelle URL que vous souhaitez gratter 2) quel mot vous voulez trouver à l'intérieur du texte de la page 3) Quel problème vous obtenez


Je veux gratter 5 pages de cette URL Nairaland.com/search?q=afonja&borard= 0 & Topicsonly = 2 pour le mot Afonja. Les occurrences / comptes d'Afonja ne sont pas corrects


Le nom du mot est-il pour compter la même chose que le mot dans l'URL?


Oui c'est dans l'URL.



0
votes

En tant que de côté, le mot de recherche a son propre nom de classe afin que vous puissiez simplement compter celles-ci. Le ci-dessous revient correctement pour l'endroit introuvable à la page. Vous pouvez utiliser cette approche dans votre boucle.

import requests 
from bs4 import BeautifulSoup as bs

for i in range(9):
    r = requests.get('https://www.nairaland.com/search/afonja/0/0/0/{}'.format(i))
    soup = bs(r.content, 'lxml')
    occurrences = len(soup.select('.highlight'))
    print(occurrences)


0 commentaires