Python: BeautifulSoup не может разобрать HTML-страницу - PullRequest
3 голосов
/ 23 мая 2019

Я пытаюсь разобрать этот URL .

Я использую запросы и BeautifulSoup.

Python-запросы успешно получают страницу.

Iпытался распечатать содержимое страницы, чтобы увидеть, есть ли у него или нет.Он имеет содержимое, но не знает, почему BeautifulSoup не может его проанализировать.Он застрял там, программа не двигается вперед.

Я пытался использовать lxml в качестве парсера, но не работал.

Код:

import requests
from bs4 import BeautifulSoup


url = "http://mnregaweb4.nic.in/netnrega/FTO/ResponseDetailStatusReport.aspx?lflag=&flg=W&page=s&state_name=BIHAR&state_code=05&district_name=ARARIA&district_code=0541&fin_year=2018-2019&typ=R&mode=B&source=national&Digest=RZw1g4RnMeHsOzbabiNGBg"

reference_page = requests.get(url)

print(" Total time to get page in seconds : "+str(reference_page.elapsed.total_seconds()))

print('\t Reference Page status : '+ str(reference_page))
print(reference_page.content)

reference_page_soup = BeautifulSoup(reference_page.content,'html.parser')
print("\n \t Page parsed")

Ответы [ 3 ]

0 голосов
/ 24 мая 2019

Вместо использования html.parser используйте lxml.Для меня весь процесс занял не более 5 секунд.Я использовал следующий код.

import requests as rq
from bs4 import BeautifulSoup

url = 'http://mnregaweb4.nic.in/netnrega/FTO/FTOReport.aspx?page=s&mode=B&flg=W&state_name=BIHAR&state_code=05&fin_year=2018-2019&dstyp=B&source=national&Digest=2H3ATbXXBsabT72RmlXODw'

resp = rq.get(url).content

soup = BeautifulSoup(resp, "lxml")

Для моей установки Python Запросы пакет находится в версии 2.21.0 , BeautifulSoup4 в версии 0.0.1 и lxml - версия 4.2.5 .Анализатор lxml работает намного быстрее, чем html.parser.

0 голосов
/ 24 мая 2019

Что сработало, я обновил следующие три пакета.

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

Затем также были обновлены следующие пакеты:

  1. Запросы
pip install requests --upgrade
BeautifulSoup
pip install beautifulsoup --upgrade
lxml
pip install lxml --upgrade
0 голосов
/ 23 мая 2019

Итак, во-первых, отклик сервера крайне медленный.Но даже для чтения того же содержимого из локального файла и передачи его в BeautifulSoup, это занимает много времени.~ 4 секунды для меня (4 секунды только для BeautifulSoup инициализации без разбора. Большое время).Я сделал небольшое исследование.Из BeautifulSoup.__init__ вызывается метод self._feed(), который, с другой стороны, вызывает LXMLTreeBuilder.feed() (это очень трудоемкая операция. Это причина, по которой создание BeautifulSoup экземпляра происходит так медленно),Используйте простую библиотеку LXML, если время так важно для вас.

import lxml.html

#URL = "http://mnregaweb4.nic.in/netnrega/FTO/ResponseDetailStatusReport.aspx?lflag=&flg=W&page=s&state_name=BIHAR&state_code=05&district_name=ARARIA&district_code=0541&fin_year=2018-2019&typ=R&mode=B&source=national&Digest=RZw1g4RnMeHsOzbabiNGBg"
# response = requests.get(URL)


html = lxml.html.parse('test.html') # Now I am reading test.html from my local disk. you can load data on local disk or try to parse directly from external data. find in documentation
table = html.xpath('//table')
print(table[0].xpath('//td')[0].text)

lxml doc.

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