можно ли использовать xpath с BeautifulSoup?

Я использую BeautifulSoup, чтобы очистить URL-адрес, и у меня был следующий код

import urllib import urllib2 from BeautifulSoup import BeautifulSoup url = "http://www.example.com/servlet/av/ResultTemplate=AVResult.html" req = urllib2.Request(url) response = urllib2.urlopen(req) the_page = response.read() soup = BeautifulSoup(the_page) soup.findAll('td',attrs={'class':'empformbody'}) 

Теперь в приведенном выше коде мы можем использовать findAll для получения тегов и информации, связанной с ними, но я хочу использовать xpath, можно ли использовать xpath с BeautifulSoup, если возможно, кто-нибудь может предоставить мне пример кода, чтобы он был более полезным ,

5 Solutions collect form web for “можно ли использовать xpath с BeautifulSoup?”

Нет, BeautifulSoup сам по себе не поддерживает выражения XPath.

Альтернативная библиотека, lxml , поддерживает XPath 1.0. Он поддерживает режим BeautifulSoup, где он попытается разобрать сломанный HTML, как делает Суп. Тем не менее, по умолчанию lxml HTML-парсер отлично справляется с разборчивым HTML-кодом , и я считаю, что это быстрее.

После того как вы проанализировали свой документ в дереве lxml, вы можете использовать метод .xpath() для поиска элементов.

 import urllib2 from lxml import etree url = "http://www.example.com/servlet/av/ResultTemplate=AVResult.html" response = urllib2.urlopen(url) htmlparser = etree.HTMLParser() tree = etree.parse(response, htmlparser) tree.xpath(xpathselector) 

Вас может заинтересовать поддержка CSS Selector ; класс CSSSelector переводит выражения CSS в выражения XPath, что значительно упрощает поиск td.empformbody :

 from lxml.cssselect import CSSSelector td_empformbody = CSSSelector('td.empformbody') for elem in td_empformbody(tree): # Do something with these table cells. 

Приходящий полный круг: у BeautifulSoup есть довольно приличная поддержка селектора CSS :

 for cell in soup.select('table#foobar td.empformbody'): # Do something with these table cells. 

Я могу подтвердить, что в Beautiful Soup нет поддержки XPath.

Код Martijn больше не работает должным образом (ему уже 4+ года …), etree.parse() печатает на консоль и не присваивает значение переменной tree . Ссылаясь на это , я смог выяснить это, используя запросы и lxml:

 from lxml import html import requests page = requests.get('http://econpy.pythonanywhere.com/ex/001.html') tree = html.fromstring(page.content) #This will create a list of buyers: buyers = tree.xpath('//div[@title="buyer-name"]/text()') #This will create a list of prices prices = tree.xpath('//span[@class="item-price"]/text()') print 'Buyers: ', buyers print 'Prices: ', prices 

Функция BeautifulSoup имеет функцию с именем findNext из текущего элемента direct childern, поэтому:

 father.findNext('div',{'class':'class_value'}).findNext('div',{'id':'id_value'}).findAll('a') 

Выше код может имитировать следующий xpath:

 div[class=class_value]/div[id=id_value] 

Я просматривал их документы, и, похоже, нет опции xpath. Кроме того, как вы можете видеть здесь по аналогичному вопросу о SO, OP просит перевод с xpath на BeautifulSoup, поэтому мой вывод будет: нет, нет синтаксического анализа xpath.

  • Разбирайте HTML через XPath
  • Пустой список с scrapy и Xpath
  • python, lxml и xpath - html разбор таблицы
  • Извлечение информации из таблицы на веб-сайте с использованием python, LXML и XPATH
  • Если атрибут существует, напечатайте описание для детей
  • Найти xth td с td содержит в одном и том же tr xpath python
  • Как сократить длинные выражения XPath со многими альтернативами OR?
  • Использовать Scrapy для обхода локального XML-файла - Запустить адрес локального файла URL-адреса
  • Как я могу щелкнуть кнопку в форме с помощью Selenium и Python 2.7?
  • Нужна помощь с использованием XPath в ElementTree
  • XPath: выберите тег с пустым значением
  •  
    Interesting Posts for Van-Lav

    Как подать сигнал от запущенного QThread обратно в PyQt Gui, который его начал?

    Как загрузить данные JSON в вложенные классы?

    Howto bin ряд значений float в гистограмме в Python?

    Как я могу найти методы Python без операторов возврата?

    скрипт python не будет завершен в планировщике задач

    Как отлаживать приложение Django, работающее на Heroku, используя удаленное соединение pdb?

    opencv с помощью python – копирование roi на новое уменьшенное изображение

    Выбор интерфейсного / интерпретатора для научного кода

    Django admin – переопределить уже зарегистрированную модель

    При чтении файла на Python я столкнулся с ошибкой, которая произнесла UnicodeDecodeError. Что я могу сделать для устранения этой ошибки?

    Как сохранить сокет открытым до тех пор, пока клиент не закроет его?

    Запись в конкретную ячейку с использованием модуля csv в python

    Подгонка всего, кроме буквы – регулярное выражение

    Блокировка до закрытия файла в python

    Каков самый быстрый способ слияния двух списков в python?

    Python - лучший язык программирования в мире.