Вы должны понимать разницу между классом и экземпляром этого класса. Если вы видите машину на улице, вы сразу же знаете, что это автомобиль, даже если вы не можете видеть, какую модель или тип. Это связано с тем, что вы сравниваете то, что видите с классом «автомобиль». Класс содержит то, что похоже на все автомобили. Подумайте об этом как о шаблоне или идее.
В то же время автомобиль, который вы видите, является экземпляром класса «автомобиль», поскольку он обладает всеми свойствами, которые вы ожидаете: есть кто-то за рулем , у него есть двигатель, колеса.
Итак, класс говорит, что «все автомобили имеют цвет», и экземпляр говорит, что «этот конкретный автомобиль красный».
В мире 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()
).
В соответствии с документами вы сначала создаете дерево синтаксического анализа:
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"]
Что-то вроде этого?
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')
.