Как выбрать содержимое тега span span в python [duplicate]

Вы должны понимать разницу между классом и экземпляром этого класса. Если вы видите машину на улице, вы сразу же знаете, что это автомобиль, даже если вы не можете видеть, какую модель или тип. Это связано с тем, что вы сравниваете то, что видите с классом «автомобиль». Класс содержит то, что похоже на все автомобили. Подумайте об этом как о шаблоне или идее.

В то же время автомобиль, который вы видите, является экземпляром класса «автомобиль», поскольку он обладает всеми свойствами, которые вы ожидаете: есть кто-то за рулем , у него есть двигатель, колеса.

Итак, класс говорит, что «все автомобили имеют цвет», и экземпляр говорит, что «этот конкретный автомобиль красный».

В мире OO, вы определяете класс и внутри класса, вы определяете поле типа Color. Когда экземпляр класса создается (когда вы создаете конкретный экземпляр), память зарезервирована для цвета, и вы можете присвоить этому конкретному экземпляру цвет. Поскольку эти атрибуты специфичны, они нестатические.

Статические поля и методы совместно используются для всех экземпляров. Они предназначены для значений, которые относятся к классу, а не к конкретному экземпляру. Для методов это обычно глобальные вспомогательные методы (например, Integer.parseInt()).

Чтобы решить вашу проблему, вам необходимо создать экземпляр экземпляра (создать объект) вашего класса, чтобы среда выполнения могла зарезервировать память для экземпляра (в противном случае разные экземпляры переписывали бы друг друга, чего вы не хотите).

В вашем случае попробуйте этот код как начальный блок:

public static void main (String[] args)
{
    try
    {
        MyProgram7 obj = new MyProgram7 ();
        obj.run (args);
    }
    catch (Exception e)
    {
        e.printStackTrace ();
    }
}

// instance variables here

public void run (String[] args) throws Exception
{
    // put your code here
}

Новый main() метод создает экземпляр класса, который он содержит (звучит странно, но поскольку main() создается с классом вместо экземпляра, он может это сделать), а затем вызывает метод экземпляра (run()).

13
задан Serhat Ozgel 29 June 2009 в 15:27
поделиться

2 ответа

В соответствии с документами вы сначала создаете дерево синтаксического анализа:

import BeautifulSoup
html = "<html><body><tr><td><a href='foo'/></td></tr></body></html>"
soup = BeautifulSoup.BeautifulSoup(html)

, а затем выполняете поиск в нем, например, для тэгов <a>, чей непосредственный родитель является <td>:

for ana in soup.findAll('a'):
  if ana.parent.name == 'td':
    print ana["href"]
22
ответ дан Alex Martelli 25 August 2018 в 02:39
поделиться
  • 1
    К сожалению, не работает – Greyshack 26 October 2015 в 22:47
  • 2
    @Greyshack, отлично работает для меня (используя текущий выпуск, конечно, через 6 лет после первоначального post-pip install beautifulsoup4, а затем, конечно же, имя модуля теперь bs4) - напечатайте 'foo', по мере необходимости. Конечно, невозможно предложить вам любую помощь, основанную на смутном описании вашей проблемы, так как «does not [sic] work & quot;! -) – Alex Martelli 31 October 2015 в 00:49

Что-то вроде этого?

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [td.find('a') for td in soup.findAll('td')]

Это должно найти первое «а» внутри каждого «td» в html, который вы предоставляете. Вы можете настроить td.find, чтобы быть более конкретным, или использовать findAll, если у вас есть несколько ссылок внутри каждого td.

UPDATE: комментарий Daniele, если вы хотите убедиться, что у вас нет None в списке, вы можете изменить понимание списка таким образом:

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [a for a in (td.find('a') for td in soup.findAll('td')) if a]

Что в основном просто добавляет проверку, чтобы увидеть, есть ли у вас фактический элемент, возвращаемый td.find('a').

21
ответ дан Thierry Lathuille 25 August 2018 в 02:39
поделиться
  • 1
    это очень умно! но если «a» нет, он будет включать None в список якорей? как я могу заполнить список якорей только фактическим «пропуском» Nones? – Daniele B 25 April 2013 в 04:41
  • 2
    Хорошо, я обновил вопрос, связанный с удалением списка None из списка. – John Montgomery 25 April 2013 в 11:09
  • 3
    замечательно! благодаря! – Daniele B 25 April 2013 в 16:07
Другие вопросы по тегам:

Похожие вопросы: