Почему beautifulsoup не показывает результата? - PullRequest
0 голосов
/ 06 мая 2020

Я пробовал это, но не получил никаких результатов. Программа просто запускается и завершается с кодом выхода 0. Все до l oop работает нормально (я проверил с помощью функции print ()).

 from bs4 import BeautifulSoup
import requests

def webscrawling(max_pages):
    page = 1
    while page <= max_pages:
        url = "https://webscraper.io/test-sites/e-commerce/allinone" + str(page)
        sourcecode = requests.get(url)
        plaintext = sourcecode.text
        soup = BeautifulSoup(plaintext, "html.parser")
        for link in soup.findAll('a', {'class' : 'title'}):
            show = link.get('href')
            print(show)
        page += 1

webscrawling(2)

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Я запускаю ваш код, распечатывая исходный код url. Вот результаты:

<Response [404]>
<Response [404]>

Как видите, мы не можем получить никакого ответа. Вы также можете попробовать подключить эти ссылки из своего браузера, вы получите ошибку 404. Проблема в том, что таких веб-страниц нет.

Но с вашим кодом нет проблем, кроме URL-адресов. Например, это ваш код, отредактированный мной. Я прокомментировал код.

from bs4 import BeautifulSoup
import requests

def webscrawling(max_page):
        page = 1;
        while page <= max_page:
                url = "https://webscraper.io/test-sites/e-commerce/allinone" #this is a valid url if we remove the page
                sourcecode = requests.get(url)
                print(sourcecode) #i printed this for knowing the response from server (200 means OK)
                plaintext = sourcecode.text
                soup = BeautifulSoup(plaintext, "html.parser")
                for link in soup.findAll('a',{'class' : 'title'}):
                        show = link.get('href')
                        print(show)
                page+=1
webscrawling(1)

, а вот результат отредактированного кода:

<Response [200]>
/test-sites/e-commerce/allinone/product/219
/test-sites/e-commerce/allinone/product/296
/test-sites/e-commerce/allinone/product/286

Изменить: Хорошо, сайт существует. Мы можем go через этот сайт «https://webscraper.io/test-sites/e-commerce/allinone» нет проблем. Но в вашем коде вы не попадете на этот сайт. Вы собираетесь куда-то еще. Ваша программа запрашивает "https://webscraper.io/test-sites/e-commerce/allinone1", разница между ними - последний символ URL-адресов. Для лучшего обзора:

https://webscraper.io/test-sites/e-commerce/allinone
https://webscraper.io/test-sites/e-commerce/allinone1

как видите, между этими ссылками есть разница. Ваша программа инициализирует URL-адрес в этой строке:

url = "https://webscraper.io/test-sites/e-commerce/allinone"+str(page)

, как вы можете видеть, у вас есть str (page) в конце URL-адреса. Что и есть причина нашей проблемы. Если вы удалите + str (page) из этой строки

url = "https://webscraper.io/test-sites/e-commerce/allinone"

, URL-адрес будет правильным.

0 голосов
/ 06 мая 2020

На просматриваемом вами веб-сайте отсутствует <a class='title'> (https://webscraper.io/test-sites/e-commerce/allinone1)

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