Я использую BeautifulSoup 4 с Python 2.7. Я хотел бы извлечь определенные элементы с веб-сайта (количества, см. пример ниже). По какой-то причине парсер lxml не позволяет мне извлечь со страницы все нужные элементы. Он будет печатать только первые три элемента. Я пытаюсь использовать анализатор html5lib, чтобы проверить, смогу ли я извлечь их все.
На странице содержится несколько элементов с указанием их цены и количества. Часть кода, содержащая нужную информацию для каждого элемента, выглядит следующим образом:
453 grams
$619.06 $523.91
Давайте рассмотрим следующие три случая:
СЛУЧАЙ 1 — ДАННЫЕ:< /p>
#! /usr/bin/python
from bs4 import BeautifulSoup
data = """
453 grams
$619.06 $523.91
"""
soup = BeautifulSoup(data)
print soup.td.span.text
Печать:
453 grams
СЛУЧАЙ 2 — LXML:
#! /usr/bin/python
from bs4 import BeautifulSoup
from urllib import urlopen
webpage = urlopen('The URL goes here')
soup=BeautifulSoup(webpage, "lxml")
print soup.find('td', {'class': 'size-price'}).span.text
Печать:
453 grams
СЛУЧАЙ 3 — HTML5LIB:
#! /usr/bin/python
from bs4 import BeautifulSoup
from urllib import urlopen
webpage = urlopen('The URL goes here')
soup=BeautifulSoup(webpage, "html5lib")
print soup.find('td', {'class': 'size-price'}).span.text
Я получаю следующую ошибку:
Traceback (most recent call last):
File "C:\Users\Dom\Python-Code\src\Testing-Code.py", line 6, in
print soup.find('td', {'class': 'size-price'}).span.text
AttributeError: 'NoneType' object has no attribute 'span'
Как мне адаптировать свой код, чтобы извлечь нужную информацию с помощью парсера html5lib? Я могу увидеть всю нужную информацию, если просто распечатаю суп в консоли после использования html5lib, поэтому я решил, что это позволит мне получить то, что я хочу. Это не относится к парсеру lxml, поэтому мне также интересно узнать, что парсер lxml, похоже, не извлекает все количества с помощью парсера lxml, если я использую:
print [td.span.text for td in soup.find_all('td', {'class': 'size-price'})]
Подробнее здесь: https://stackoverflow.com/questions/226 ... ifferences
BeautifulSoup — парсеры lxml и html5lib, очищающие различия ⇐ Python
Программы на Python
-
Anonymous
1732766900
Anonymous
Я использую [b]BeautifulSoup 4[/b] с [b]Python 2.7[/b]. Я хотел бы извлечь определенные элементы с веб-сайта (количества, см. пример ниже). По какой-то причине парсер [b]lxml[/b] не позволяет мне извлечь со страницы все нужные элементы. Он будет печатать только первые три элемента. Я пытаюсь использовать анализатор [b]html5lib[/b], чтобы проверить, смогу ли я извлечь их все.
На странице содержится несколько элементов с указанием их цены и количества. Часть кода, содержащая нужную информацию для каждого элемента, выглядит следующим образом:
453 grams
$619.06 $523.91
Давайте рассмотрим следующие три случая:
[b]СЛУЧАЙ 1 — ДАННЫЕ:[/b]< /p>
#! /usr/bin/python
from bs4 import BeautifulSoup
data = """
453 grams
$619.06 $523.91
"""
soup = BeautifulSoup(data)
print soup.td.span.text
Печать:
453 grams
[b]СЛУЧАЙ 2 — LXML:[/b]
#! /usr/bin/python
from bs4 import BeautifulSoup
from urllib import urlopen
webpage = urlopen('The URL goes here')
soup=BeautifulSoup(webpage, "lxml")
print soup.find('td', {'class': 'size-price'}).span.text
Печать:
453 grams
[b]СЛУЧАЙ 3 — HTML5LIB:[/b]
#! /usr/bin/python
from bs4 import BeautifulSoup
from urllib import urlopen
webpage = urlopen('The URL goes here')
soup=BeautifulSoup(webpage, "html5lib")
print soup.find('td', {'class': 'size-price'}).span.text
Я получаю следующую ошибку:
Traceback (most recent call last):
File "C:\Users\Dom\Python-Code\src\Testing-Code.py", line 6, in
print soup.find('td', {'class': 'size-price'}).span.text
AttributeError: 'NoneType' object has no attribute 'span'
Как мне адаптировать свой код, чтобы извлечь нужную информацию с помощью парсера html5lib? Я могу увидеть всю нужную информацию, если просто распечатаю суп в консоли после использования html5lib, поэтому я решил, что это позволит мне получить то, что я хочу. Это не относится к парсеру lxml, поэтому мне также интересно узнать, что парсер lxml, похоже, не извлекает все количества с помощью парсера lxml, если я использую:
print [td.span.text for td in soup.find_all('td', {'class': 'size-price'})]
Подробнее здесь: [url]https://stackoverflow.com/questions/22696961/beautifulsoup-lxml-and-html5lib-parsers-scraping-differences[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия