2016-03-27 2 views
0

Я очень мало знаю о Python. Но я пытался добиться чего-то в Extract, Transform and Load (ETL), используя небольшой скрипт Python. Я получаю желаемый результат, но все же хочу понять этот скрипт.Понимание методов класса в коде Python

from bs4 import BeautifulSoup 
import urllib 
import re 
import string 
import csv 
urlHandle = urllib.urlopen("http://finance.yahoo.com/q/cp?s=^DJI") 
html = urlHandle.read() 
soup = BeautifulSoup(html) 
table = soup.find('table', attrs = { 
    'id': 'yfncsumtab' 
}) 
rows = table.findAll('tr') 

a = '' 
csvfile = open("F:/data/yahoofinance.csv", 'w') 
for tr in rows[5: ]: 
    for td in tr.find_all('td', attrs = { 
     'class': 'yfnc_tabledata1' 
    }): 
    a += '"' + td.get_text() + '",' 
a += '\n' 
csvfile.write(a) 
a = ' 

Мои вопросы в этом коде, soup является объект, возвращаемый из BeautifulSoup(html) функции. Я прав? Итак, в следующем утверждении я предполагаю, что table также является объектом, так что означает, что мы ищем значение в объекте soup с использованием функции find и что оно возвращает объект?

Пожалуйста, поправьте меня на моей информации, я понял себя в приведенном выше коде ...

  1. urlHandle класс, urllib что? и urlopen - статический метод.

  2. html - объект, urlhandle - класс, read - это метод.

  3. soup является объектом, BeautifulSoup(html) является функцией.

Просьба высказать свое мнение о моем понимании .... и исправить меня, где не так с вашими опытными словами!

ответ

1
  1. urlHandle является объектом, urllib является модулем и urlopen является функцией
  2. html является объектом и read представляет собой метод
  3. soup является объектом и BeatifulSoup(html) является конструктором для BeautifulSoup объекта

Это может быть довольно запутанным, но в целом вы можете иметь в виду, что имена CamelCased являются классами, которые делает CamelCase() конструктором. Импортируется модуль, который может содержать классы и/или функции.

+0

Джесси Баккер, спасибо! Еще один вопрос, что происходит в таблице = soup.find ('table', attrs = {'id': 'yfncsumtab'). Вот таблица в объекте? Если да, то СО создается при поиске функции поиска в суп-объекте? – Kate

+0

Да, soup.find находит таблицу, а затем создает объект, обертывающий html. –

1

Чтобы быть техническим, я думаю, что важно понимать, что ВСЕ в Python является объектом. Итак, классы - это объекты, функции - объекты, все - объект.

Это, как говорится, мы делаем различие после того, такие как «функция», «класс» и т.д.

URLLIB, в частности, является то, что мы называем module.

1
  1. soup является примером BeautifulSoup.
  2. urlHandle снова экземпляр, urllib является модулем и urlopen является функцией, принадлежащей к этому модулю
  3. html является объектом и read представляет собой метод, который выполняется.

Существует способ, которым вы можете узнать их самостоятельно, используя функцию type().

0

В Python в основном все является объектом! , когда вы используете import, вы включаете в себя определенный модуль, такой как urllib.

такие вещи, как soup = BeautifulSoup(html), означает, что вы создаете экземпляр (также объект) модуля класса BeautifulSoup, который вы инициируете/конструируете передачу объекта html.

тогда такие вещи, как soup.find(..., являются функциями, которые используют экземпляр класса для выполнения определенной работы. В этом случае получите первую таблицу HTML с идентификатором атрибута со значением «yfncsumtab». он возвращает тег Beautifult/obj.

Смежные вопросы