Python: невозможно получить любой вывод с помощью Beautifulsoup - PullRequest
3 голосов
/ 08 апреля 2019

Я пытаюсь удалить некоторые слова с любого случайного веб-сайта, но следующая программа не показывает ошибки и не отображает вывод, когда я пытался распечатать результаты.

Я дважды проверил код и даже включил оператор if, чтобы увидеть, получает ли программа какие-либо слова или нет.


    import requests
    import operator
    from bs4 import BeautifulSoup


    def word_count(url):

        wordlist = []

        source_code = requests.get(url)

        source = BeautifulSoup(source_code.text, features="html.parser")

        for post_text in source.findAll('a', {'class':'txt'}):
            word_string=post_text.string

            if word_string is not None:
                word = word_string.lower().split()

                for each_word in word:
                    print(each_word)
                    wordlist.append(each_word)

                else:
                    print("None")

    word_count('https://mumbai.craigslist.org/')

Я ожидаю, что все слова из «class = txt» будут отображаться в выводе.

Ответы [ 3 ]

3 голосов
/ 08 апреля 2019

OP : Я ожидаю, что все слова текста класса будут отображены в выводе

Преступник :

for post_text in source.findAll('a', {'class':'txt'}):

Причина :

У тега привязки нет класса txt, но у тега span внутри него есть.

Следовательно :

import requests
from bs4 import BeautifulSoup

def word_count(url):
    source_code = requests.get(url)
    source=BeautifulSoup(source_code.text, features="html.parser")

    for post_text in source.findAll('a'):
        s_text = post_text.find('span', class_ = "txt")
        if s_text is not None:
            print(s_text.text)

word_count('https://mumbai.craigslist.org/')

ВЫХОД :

community
activities
artists
childcare
classes
events
general
groups
local news
lost+found
missed connections
musicians
pets
.
.
.
2 голосов
/ 08 апреля 2019

Я посетил https://mumbai.craigslist.org/, и обнаружил, что нет <a class="txt">, только <span class="txt">, поэтому я думаю, что вы можете попробовать это:

def word_count(url):
    wordlist = []
    source_code = requests.get(url)
    source=BeautifulSoup(source_code.text, features="html.parser")
    for post_text in source.findAll('span', {'class':'txt'}):
        word_string=post_text.text
        if word_string is not None:
            word = word_string.lower().split ()
            for each_word in word:
                print(each_word)
                wordlist.append(each_word)
         else:
            print("None")

будет выводиться правильно:

community
activities
artists
childcare
classes
events
general
...

Надеюсь, что это поможет вам, и прокомментируйте, если у вас есть дополнительные вопросы. :)

2 голосов
/ 08 апреля 2019

Вы нацелены не на те элементы.

если вы используете

print(source)

Все работает нормально, но в тот момент, когда вы пытаетесь настроить таргетинг на элемент с помощью findAll, вы нацеливаетесь на что-то неправильное, потому что получаете пустой массив списка.

Если вы замените

for post_text in source.findAll('a', {'class':'txt'}):

с

for post_text in source.find_all('a'):

Кажется, все работает нормально

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...