Как я могу перевести это выражение XPath в BeautifulSoup?

В ответ на предыдущий вопрос несколько человек предложили использовать BeautifulSoup для моего проекта. Я боролся с их документацией, и я просто не могу разобрать его. Может ли кто-нибудь указать мне на раздел, где я должен перевести это выражение в выражение BeautifulSoup?

hxs.select('//td[@class="altRow"][2]/a/@href').re('/.a\w+') 

Вышеприведенное выражение относится к Scrapy . Я пытаюсь применить regex re('\.a\w+') td class altRow re('\.a\w+') к td class altRow чтобы получить ссылки оттуда.

Я также хотел бы обратить внимание на любые другие учебники или документацию. Я не мог найти.

Спасибо за вашу помощь.

Редактировать: Я смотрю эту страницу :

 >>> soup.head.title <title>White & Case LLP - Lawyers</title> >>> soup.find(href=re.compile("/cabel")) >>> soup.find(href=re.compile("/diversity")) <a href="/diversity/committee">Committee</a> 

Тем не менее, если вы посмотрите на источник страницы "/cabel" , есть:

  <td class="altRow" valign="middle" width="34%"> <a href='/cabel'>Abel, Christian</a> 

По какой-то причине результаты поиска не видны в BeautifulSoup, но они видны для XPath, потому что hxs.select('//td[@class="altRow"][2]/a/@href').re('/.a\w+') ловит "/ cabel"

Изменить: cobbal: Он все еще не работает. Но когда я ищу это:

 >>>soup.findAll(href=re.compile(r'/.a\w+')) [<link href="/FCWSite/Include/styles/main.css" rel="stylesheet" type="text/css" />, <link rel="shortcut icon" type="image/ico" href="/FCWSite/Include/main_favicon.ico" />, <a href="/careers/northamerica">North America</a>, <a href="/careers/middleeastafrica">Middle East Africa</a>, <a href="/careers/europe">Europe</a>, <a href="/careers/latinamerica">Latin America</a>, <a href="/careers/asia">Asia</a>, <a href="/diversity/manager">Diversity Director</a>] >>> 

он возвращает все ссылки со вторым символом «а», но не именами адвокатов. Поэтому по какой-то причине эти ссылки (например, «/ cabel») не видны BeautifulSoup. Я не понимаю, почему.

4 Solutions collect form web for “Как я могу перевести это выражение XPath в BeautifulSoup?”

Я знаю, что BeautifulSoup является каноническим модулем синтаксического анализа HTML, но иногда вам просто нужно очистить некоторые подстроки из некоторого HTML, а у pyparsing есть некоторые полезные методы для этого. Используя этот код:

 from pyparsing import makeHTMLTags, withAttribute, SkipTo import urllib # get the HTML from your URL url = "http://www.whitecase.com/Attorneys/List.aspx?LastName=&FirstName=" page = urllib.urlopen(url) html = page.read() page.close() # define opening and closing tag expressions for <td> and <a> tags # (makeHTMLTags also comprehends tag variations, including attributes, # upper/lower case, etc.) tdStart,tdEnd = makeHTMLTags("td") aStart,aEnd = makeHTMLTags("a") # only interested in tdStarts if they have "class=altRow" attribute tdStart.setParseAction(withAttribute(("class","altRow"))) # compose total matching pattern (add trailing tdStart to filter out # extraneous <td> matches) patt = tdStart + aStart("a") + SkipTo(aEnd)("text") + aEnd + tdEnd + tdStart # scan input HTML source for matching refs, and print out the text and # href values for ref,s,e in patt.scanString(html): print ref.text, ref.a.href 

Я извлек 914 ссылок с вашей страницы, от Абеля до Зупиковой.

 Abel, Christian /cabel Acevedo, Linda Jeannine /jacevedo Acuña, Jennifer /jacuna Adeyemi, Ike /igbadegesin Adler, Avraham /aadler ... Zhu, Jie /jzhu ZÃdek, AleÅ¡ /azidek Ziółek, Agnieszka /aziolek Zitter, Adam /azitter Zupikova, Jana /jzupikova 

один вариант – использовать lxml (я не знаком с beautifulsoup, поэтому я не могу сказать, как с ним работать), он по умолчанию поддерживает XPath

Редактировать:
попробуйте (непроверенные) :

 soup.findAll('td', 'altRow')[1].findAll('a', href=re.compile(r'/.a\w+'), recursive=False) 

Я использовал документы в http://www.crummy.com/software/BeautifulSoup/documentation.html

суп должен быть объектом BeautifulSoup

 import BeautifulSoup soup = BeautifulSoup.BeautifulSoup(html_string) 

Я просто ответил на это в списке рассылки Beautiful Soup в качестве ответа на электронную почту Zeynel в списке. В основном, на веб-странице есть ошибка, которая полностью уничтожает Beautiful Soup 3.1 во время разбора, но просто искажается Beautiful Soup 3.0.

Поток находится в архиве групп Google .

Кажется, что вы используете BeautifulSoup 3.1

Я предлагаю вернуться к BeautifulSoup 3.0.7 (из-за этой проблемы )

Я только что протестировал с 3.0.7 и получил ожидаемые результаты:

 >>> soup.findAll(href=re.compile(r'/cabel')) [<a href="/cabel">Abel, Christian</a>] 

Тестирование с помощью BeautifulSoup 3.1 дает результаты, которые вы видите. Вероятно, в html есть неправильный тег, но я не видел, что это было в быстром взгляде.

  • Найти элемент в дереве XML с помощью ElementTree
  • Lxml html xpath context
  • Как я могу получить весь текст с сайта Scrapy?
  • Python - Selenium и XPATH для извлечения всех строк из таблицы
  • Динамические веб-сайты Python Scrapy
  • Как использовать unicode внутри строки xpath? (UnicodeEncodeError)
  • Как сформулировать выражение Xpath для получения атрибута из дочернего узла?
  • Система не может найти элемент во второй раз
  • Python - лучший язык программирования в мире.