2014-12-17 3 views
0

Я не уверен, правильно ли я подошел. Я использую запросы, чтобы сделать GET:Анализ HTML с запросами и BeautifulSoup

con = s.get(url) 

, когда я вызываю con.content, вся страница есть. Но когда я передаю con в BS:

У меня нет ни одного. Там есть много тегов, а не за какой-либо JS, которые заданы, когда я вызываю con.content, но когда я пытаюсь разобрать с BS, большая часть страницы не существует.

+0

Вы в состоянии предоставить URL вы получаете? – mnjeremiah

+0

К сожалению, нет. Это работа, работающая с VPN. Если вы ищете что-то конкретное, я могу предоставить вам отредактированный код для просмотра. –

+0

Было бы полезно узнать, что вы передаете BS, чтобы помочь. – mnjeremiah

ответ

2

Изменить анализатору html5lib

pip install html5lib 

А потом,

soup = BeautifulSoup(con.content,'html5lib') 
+0

Это сработало! Благодарю. Зачем нужно было добавлять html5lib? –

1

Знаки a, вероятно, не находятся на верхнем уровне.

soup.find_all('a') 

, вероятно, то, что вы хотели.

В общем, я нашел lxml, чтобы быть более надежным, последовательным в API и быстрее. Да, еще более надежный - у меня неоднократно были документы, в которых BeautifulSoup не смог их разобрать, но lxml в своем надежном режиме lxml.html.soupparser все еще работал хорошо. И есть API lxml.etree, который очень прост в использовании.

+0

find_all ничего не возвращает. Я дам lxml попробовать. Спасибо за предложение –

0

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

import requests 
from bs4 import BeautifulSoup 

s = requests.session() 

con = s.get('https://news.ycombinator.com/') 

soup = BeautifulSoup(con.text) 

links = soup.findAll('a') 

for link in links: 
    print link 
Смежные вопросы