Ошибка - при разборе веб-страницы с использованием BeautifulSoup4 - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь проанализировать веб-страницу и распечатать ссылку для элементов (href).Можете ли вы помочь с тем, где я иду не так?

import requests
from bs4 import BeautifulSoup

link = "https://www.amazon.in/Power- 
Banks/b/ref=nav_shopall_sbc_mobcomp_powerbank?ie=UTF8&node=6612025031"

def amazon(url):
    sourcecode = requests.get(url)
    sourcecode_text = sourcecode.text
    soup = BeautifulSoup(sourcecode_text)

    for link in soup.findALL('a', {'class': 'a-link-normal aok-block a- 
text-normal'}):
        href = link.get('href')
        print(href)

amazon(link)

Вывод:

C: \ Users \ TIMAH \ AppData \ Local \ Programs \ Python \ Python37 \ python.exeТрассировка «C: / Users / TIMAH / OneDrive / учебные материалы / Python_Test_Scripts / Self Basic / Class_Test.py»: файл «C: / Users / TIMAH / OneDrive / учебные материалы / Python_Test_Scripts / Self Basic / Class_Test».py ", строка 15, в amazon (ссылка) Файл" C: / Users / TIMAH / OneDrive / учебные материалы / Python_Test_Scripts / Self Basic / Class_Test.py ", строка 9, в супе amazon = BeautifulSoup (sourcecode_text, 'features ="html.parser" ') Файл "C: \ Users \ TIMAH \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ bs4__init __. py", строка 196, в init % ", ". join (features)) bs4.FeatureNotFound: Не удалось найти конструктор дерева с запрашиваемыми функциями: features =" html.parser ".Вам нужно установить библиотеку парсера?

Процесс завершен с кодом выхода 1

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

проблема в вашем коде: вы используете неправильное имя метода findALL. В супе-объекте нет метода findALL, поэтому для него не возвращается значение None.чтобы исправить это, используйте find_all для нового кода, также findAll должен работать (с строчной буквы double l).надеюсь, что это ясно для вас.

import requests
from bs4 import BeautifulSoup

link = "https://www.amazon.in/Power-Banks/b/ref=nav_shopall_sbc_mobcomp_powerbank?ie=UTF8&node=6612025031"


def amazon(url):
    sourcecode = requests.get(url)
    sourcecode_text = sourcecode.text
    soup = BeautifulSoup(sourcecode_text, "html.parser")
    # add "html.parser" as second arg , so you not get a warning .
    # use soup.find_all for new code , also soup.findAll should work 
    for link in soup.find_all('a', {'class': 'a-link-normal aok-block a-text-normal'}):
        href = link.get('href')
        print(href)

amazon(link)
0 голосов
/ 14 февраля 2019

Вы можете добавить заголовки.Кроме того, когда вы делаете find_all('a'), вы можете просто получить его там: href:

import requests
from bs4 import BeautifulSoup

link = "https://www.amazon.in/Power-Banks/b/ref=nav_shopall_sbc_mobcomp_powerbank?ie=UTF8&node=6612025031"

def amazon(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}

    sourcecode = requests.get(url, headers=headers)
    sourcecode_text = sourcecode.text
    soup = BeautifulSoup(sourcecode_text, 'html.parser')

    for link in soup.find_all('a', href=True):
        href = link.get('href')
        print(href)

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