Home / Uncategorized / Robotukai: K125 pavyzdys

Robotukai: K125 pavyzdys

Šiame pavyzdyje nuskaitysime butų informaciją iš projekto K125. Butų informaciją (kaina, plotas ir pan.) galime rasti užėję ant tooltipų aukšto planuose:

K125 aukštų planas

Išsaugotą puslapio kopiją rasite čia. Patalpų aprašymo HTML kodo struktūra atrodo šitaip:

<area 
  shape="poly" 
  coords="1688,0,1779,1,1779,204,1689,204" 
  href="#" 
  alt="Patalpa 8" 
  data-num="9"
  data-flat-id="8"  
  data-flat-status="Parduotas" 
  data-flat-area="28,39"
  ata-flat-orientation="north"
  data-flat-price="59000"
  data-maphilight='{"fillColor":"e13b18"}'>

Standartiškai pradedame nuo reguliariaus reiškinio, aprašančio mums reikalinga struktūrą:

r = re.compile('<area shape="poly" coords=".*?" href=".*?" alt=".*?" data-num=".*?" data-flat-id="(.*?)" data-flat-status="(.*?)" data-flat-area="(.*?)" data-flat-orientation="(.*?)" data-flat-price="(.*?)" data-maphilight=".*?">')
results = r.findall(req.content.decode('utf-8'))

for r in results:
  print(r)

Šis reiškinys grąžintų rezultatus šiuo formatu:

('23', 'Laisvas', '70,50', 'north', '145000')
('24', 'Laisvas', '53,40', 'north', '110000')
('25', 'Parduotas', '24,75', 'north', '56000')
('26', 'Parduotas', '24,75', 'north', '56000')
('1', 'Laisvas', '54,19', 'north', '110000')
...

Tai atspindi tokią eilutės struktūrą:

[id, status, area, orientation, price]

Panaudokime transform API pakeisti paieškos rezultatus į rekiamą struktūrą:

# ('10', 'Laisvas', '59,97', 'south', '149900')
transform_data = {
  'email': 'tavo@email.com',
  'data': json.dumps(results),
  'schema': json.dumps(['id', 'status', 'area', 'orientation', 'price']),
}
tranform_response = requests.post('http://www.citynow.org/api/transform', data=transform_data).json()
apartments = tranform_response.get('results')

Transformuoti rezultatai yra reikalingu formatu:

[{
  'status': 0, 
  'price': 145000, 
  'orientation': ['E', 'N'], 
  'id': '23', 
  'area': 70.5,
  },
 ..
]

Pastebime keletą dalykų: struktūrizuoje vis dar trūksta dviejų privalomų laukelių: kambarių skaičiaus (loftu projekte visada bus reikšmė 1), bei aukštų skaičiaus. Pastarąjį galime apskaičiuoti nuskaitydami aukšto reikšmę iš lentelės antraštės, kurios struktūra atrodo taip:

<h3 class="heading">7 aukštas</h3>

Galutinė programa atrodys taip:

Leave a Reply

Your email address will not be published. Required fields are marked *