Guest User

Shitcode check

a guest
Jul 16th, 2015
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.52 KB | None | 0 0
  1. # -*- coding: utf8 -*-
  2. __author__ = 'noobcoder'
  3. import urllib2
  4. from lxml.etree import tostring
  5. from itertools import chain
  6. import hashlib
  7. import pandas
  8. import progressbar
  9. # from lxml.html import fromstring
  10. from pandas import DataFrame
  11. import sys
  12. # import json
  13. from pandas.io.json import json_normalize
  14.  
  15. reload(sys)
  16. sys.setdefaultencoding('utf-8')  # Кодировку обязательно UTF-8
  17. # Заполняем переменные
  18. main_domain_stat = 'http://www.newatlant.ru'  # Да, это Новый Атлант
  19. table_container = 'objlist'  # Сюда контейнер с общим списком
  20. list_url = 'Catalog/Houses?number=2000'  # Сюда кусок URL, указывающий на наименование страницы с контентом
  21. detail_tabl = DataFrame(None, None, columns=['id', 'district', 'purpose', 'address', 'descr', 'price', 'square', 'land',
  22.                                              'office', 'build1', 'build2', 'build3', 'build4', 'photo', 'price_mil',
  23.                                              'doc', 'has_photo', 'for_rent', 'square_f', 'avito', 'owner']) #датафрейм с описаниями
  24.  
  25. md5_iter = DataFrame(columns=['MD5'])  # Итератор для контрольных сумм
  26. outstring = {}
  27.  
  28.  
  29. # Странная функция, но работает.
  30. # Я хз, как я её писал, либо откуда стырил.
  31. # Принимает XML, либо HTML ноду, возвращает строку без тегов
  32. def stringify_children(node):
  33.  
  34.     a = chain(*([tostring(c, method='text', encoding="UTF-8"), c.tail] for c in node.getchildren()))
  35.     parts = ([node.text] +
  36.              list(a) +
  37.              [node.tail])
  38.     # filter removes possible Nones in texts and tails
  39.     return ''.join(filter(None, parts))
  40.  
  41.  
  42. html1 = urllib2.urlopen(main_domain_stat+'/'+list_url).read()
  43. elevations = html1
  44. detail_tabl = pandas.io.json.read_json(elevations)
  45. print(detail_tabl)
  46. print(u'Получение основной таблицы...ok')
  47. bar = progressbar.ProgressBar(maxval=len(detail_tabl), widgets=[
  48.     u'Получение итеративных элементов: ',  # Статический текст
  49.     progressbar.Bar(left='[', marker='=', right=']'),  # Прогресс
  50.     # progressbar.ReverseBar(left='[', marker='*', right=']'),
  51.     #  Регресс пока нафиг не нужен, если что -- раскомментть недолго
  52.     progressbar.SimpleProgress(),  # Надпись "x из YY")
  53.     ]).start()
  54. for j in range(len(detail_tabl)):  # Пока есть записи в таблице
  55.     bar.update(j)
  56.     iterable_frame = detail_tabl.iloc[j]
  57.     if detail_tabl['photo'][j]:
  58.         try:
  59.             logo = urllib2.urlopen(main_domain_stat+'/'+detail_tabl['photo'][j]).read()
  60.             f = open("cachemd5", "wb")
  61.             f.write(logo)
  62.             f.close()
  63.             md5_iter = md5_iter.append(DataFrame([{'MD5': hashlib.md5(open('cachemd5', 'rb').read()).hexdigest()}]),
  64.                                        ignore_index=True)
  65.         except:
  66.             logo = ''
  67.             md5_iter = md5_iter.append(DataFrame([{'MD5': ''}]))
  68.  
  69.     j += 1
  70. print(u'Получение итеративных элементов...ok')
  71. detail_tabl['MD5'] = md5_iter
  72. print(detail_tabl['MD5'])
  73. detail_tabl = detail_tabl.fillna('0')
  74. print(u'Загрузка контрольных сумм...ok')
  75. print(u'Почти всё готово')
  76. cntr = 1
  77. while cntr < detail_tabl.__len__():
  78.     outstring[cntr] = ('<store-ad validfrom="2015-01-01T10:42:19" validtill="2016-10-13T10:42:19" '
  79.                        'power-ad="1" source-id="'+str(cntr+1500)+'" category="/real-estate/out-of-town/houses/" '
  80.                        'adverttype="realty_new">\n'
  81.                        '<price value="'+str(detail_tabl["Price"][cntr])+'" currency="RUR"></price>\n'
  82.                        '<title>'+str(detail_tabl["RoomCount"][cntr])+'-комн. кв., '
  83.                        + detail_tabl["district"][cntr]+' р-н '+detail_tabl["Address"][cntr]+'</title>\n'
  84.                        '<description>'+detail_tabl["Descr"][cntr]+'</description>\n'
  85.                        '<fotos>\n'
  86.                        '<foto-remote url="'+detail_tabl["photo"][cntr]+'"\n'
  87.                        'md5="'+str(detail_tabl["MD5"][cntr])+'"/>\n'
  88.                        '</fotos>\n'
  89.                        '<custom-fields>\n'
  90.                        '<field name="region">Хабаровский</field>\n'
  91.                        '<field name="address_city">Хабаровск</field>\n'
  92.                        '<field name="email">[email protected] </field>\n'
  93.                        '<field name="web">http://www.newatlant.ru</field>\n'
  94.                        '<field name="phone">+7(4212)74-94-84</field>\n'
  95.                        '<field name="land">'+detail_tabl["LandSquare"][cntr]+'</field>\n'
  96.                        '<field name="rooms">'+str(detail_tabl["RoomCount"][cntr])+'</field>\n'
  97.                        '<field name="meters-total">'+str(detail_tabl["HouseSquare"][cntr])+'</field>\n'
  98.                        '<field name="private">да</field>\n'
  99.                        '</custom-fields>\n</store-ad>\n'.encode('utf8'))
  100.     print(outstring[cntr])
  101.     outfile = open("adverts_NewAtlant.xml", "a")
  102.     outfile.write(outstring[cntr])
  103.     outfile.close()
  104.     print (outstring[cntr])
  105.     cntr += 1
  106. print(outstring)
  107. outfile = open("adverts_NewAtlant.xml", "a")
  108. outfile.write('\n</user>\n \
  109.                    </users>')
  110. outfile.close()
Advertisement
Add Comment
Please, Sign In to add comment