Python Ошибка: у объекта 'NoneType' нет атрибута 'find_all' при использовании Beautiful Soup - PullRequest
1 голос
/ 18 апреля 2020

У меня проблема с каким-то веб-кодом, который я пытаюсь запустить. Чтобы собрать информацию из ряда ссылок, таких как:

http://www2.congreso.gob.pe/Sicr/TraDocEstProc/CLProLey2006.nsf/ec97fee42a2412d5052578bb001539ee/89045fe8ae896e2e0525751c005544cd?OpenDocument

Я пытаюсь удалить некоторые элементы из таблицы, но я получил следующую ошибку :

Python Error: 'NoneType' object has no attribute 'find_all'

Я знаю, что это связано с тем фактом, что на самом деле он не находит таблицу, потому что, когда я запускаю следующий упрощенный код:

from bs4 import BeautifulSoup
import requests
import pandas as pd
import csv
import time

url = 'http://www2.congreso.gob.pe/Sicr/TraDocEstProc/CLProLey2006.nsf/ec97fee42a2412d5052578bb001539ee/89045fe8ae896e2e0525751c005544cd?OpenDocument'

page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')


table = soup.find('table', {'bordercolor' : '#6583A0'})
print(table)

Он возвращает 'None' для напечатанной таблицы, то есть код не может очистить ни одну из функций таблицы. Я выполняю подобный код для похожих страниц, и я могу найти таблицу просто отлично, поэтому я не уверен, почему это не работает? Я новичок в вебшопинге, но буду признателен за любую помощь!

Ответы [ 3 ]

1 голос
/ 18 апреля 2020

Я думаю, что html содержит некоторый fl aws, из-за которого html синтаксический анализатор не может правильно проанализировать ваш html, вы можете убедиться в этом, напечатав page.text, а затем напечатав soup. что в документе есть некоторые части, удаленные парсером.

Однако парсер l xml успешно проанализировал его с его недостатком, поскольку lxml лучше подходит для плохо отформатированных документов html:

rom bs4 import BeautifulSoup
import requests
import pandas as pd
import csv
import time

url = 'http://www2.congreso.gob.pe/Sicr/TraDocEstProc/CLProLey2006.nsf/ec97fee42a2412d5052578bb001539ee/89045fe8ae896e2e0525751c005544cd?OpenDocument'

page = requests.get(url)
soup = BeautifulSoup(page.text, 'lxml')


table = soup.find('table', {'bordercolor' : '#6583A0'})
print(table)

, который должен правильно ловить тег таблицы

1 голос
/ 18 апреля 2020

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

url = 'http://www2.congreso.gob.pe/Sicr/TraDocEstProc/CLProLey2006.nsf/ec97fee42a2412d5052578bb001539ee/89045fe8ae896e2e0525751c005544cd?OpenDocument'

page = requests.get(url)
soup = BeautifulSoup(page.text.replace("</script\n", "</script>"), 'html.parser')

table = soup.find('table', {'bordercolor' : '#6583A0'})
print(table)
0 голосов
/ 18 апреля 2020
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...