Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf8 -*-
- __author__ = 'noobcoder'
- import urllib2
- from lxml.etree import tostring
- from itertools import chain
- import hashlib
- import pandas
- import progressbar
- # from lxml.html import fromstring
- from pandas import DataFrame
- import sys
- # import json
- from pandas.io.json import json_normalize
- reload(sys)
- sys.setdefaultencoding('utf-8') # Кодировку обязательно UTF-8
- # Заполняем переменные
- main_domain_stat = 'http://www.newatlant.ru' # Да, это Новый Атлант
- table_container = 'objlist' # Сюда контейнер с общим списком
- list_url = 'Catalog/Houses?number=2000' # Сюда кусок URL, указывающий на наименование страницы с контентом
- detail_tabl = DataFrame(None, None, columns=['id', 'district', 'purpose', 'address', 'descr', 'price', 'square', 'land',
- 'office', 'build1', 'build2', 'build3', 'build4', 'photo', 'price_mil',
- 'doc', 'has_photo', 'for_rent', 'square_f', 'avito', 'owner']) #датафрейм с описаниями
- md5_iter = DataFrame(columns=['MD5']) # Итератор для контрольных сумм
- outstring = {}
- # Странная функция, но работает.
- # Я хз, как я её писал, либо откуда стырил.
- # Принимает XML, либо HTML ноду, возвращает строку без тегов
- def stringify_children(node):
- a = chain(*([tostring(c, method='text', encoding="UTF-8"), c.tail] for c in node.getchildren()))
- parts = ([node.text] +
- list(a) +
- [node.tail])
- # filter removes possible Nones in texts and tails
- return ''.join(filter(None, parts))
- html1 = urllib2.urlopen(main_domain_stat+'/'+list_url).read()
- elevations = html1
- detail_tabl = pandas.io.json.read_json(elevations)
- print(detail_tabl)
- print(u'Получение основной таблицы...ok')
- bar = progressbar.ProgressBar(maxval=len(detail_tabl), widgets=[
- u'Получение итеративных элементов: ', # Статический текст
- progressbar.Bar(left='[', marker='=', right=']'), # Прогресс
- # progressbar.ReverseBar(left='[', marker='*', right=']'),
- # Регресс пока нафиг не нужен, если что -- раскомментть недолго
- progressbar.SimpleProgress(), # Надпись "x из YY")
- ]).start()
- for j in range(len(detail_tabl)): # Пока есть записи в таблице
- bar.update(j)
- iterable_frame = detail_tabl.iloc[j]
- if detail_tabl['photo'][j]:
- try:
- logo = urllib2.urlopen(main_domain_stat+'/'+detail_tabl['photo'][j]).read()
- f = open("cachemd5", "wb")
- f.write(logo)
- f.close()
- md5_iter = md5_iter.append(DataFrame([{'MD5': hashlib.md5(open('cachemd5', 'rb').read()).hexdigest()}]),
- ignore_index=True)
- except:
- logo = ''
- md5_iter = md5_iter.append(DataFrame([{'MD5': ''}]))
- j += 1
- print(u'Получение итеративных элементов...ok')
- detail_tabl['MD5'] = md5_iter
- print(detail_tabl['MD5'])
- detail_tabl = detail_tabl.fillna('0')
- print(u'Загрузка контрольных сумм...ok')
- print(u'Почти всё готово')
- cntr = 1
- while cntr < detail_tabl.__len__():
- outstring[cntr] = ('<store-ad validfrom="2015-01-01T10:42:19" validtill="2016-10-13T10:42:19" '
- 'power-ad="1" source-id="'+str(cntr+1500)+'" category="/real-estate/out-of-town/houses/" '
- 'adverttype="realty_new">\n'
- '<price value="'+str(detail_tabl["Price"][cntr])+'" currency="RUR"></price>\n'
- '<title>'+str(detail_tabl["RoomCount"][cntr])+'-комн. кв., '
- + detail_tabl["district"][cntr]+' р-н '+detail_tabl["Address"][cntr]+'</title>\n'
- '<description>'+detail_tabl["Descr"][cntr]+'</description>\n'
- '<fotos>\n'
- '<foto-remote url="'+detail_tabl["photo"][cntr]+'"\n'
- 'md5="'+str(detail_tabl["MD5"][cntr])+'"/>\n'
- '</fotos>\n'
- '<custom-fields>\n'
- '<field name="region">Хабаровский</field>\n'
- '<field name="address_city">Хабаровск</field>\n'
- '<field name="email">[email protected] </field>\n'
- '<field name="web">http://www.newatlant.ru</field>\n'
- '<field name="phone">+7(4212)74-94-84</field>\n'
- '<field name="land">'+detail_tabl["LandSquare"][cntr]+'</field>\n'
- '<field name="rooms">'+str(detail_tabl["RoomCount"][cntr])+'</field>\n'
- '<field name="meters-total">'+str(detail_tabl["HouseSquare"][cntr])+'</field>\n'
- '<field name="private">да</field>\n'
- '</custom-fields>\n</store-ad>\n'.encode('utf8'))
- print(outstring[cntr])
- outfile = open("adverts_NewAtlant.xml", "a")
- outfile.write(outstring[cntr])
- outfile.close()
- print (outstring[cntr])
- cntr += 1
- print(outstring)
- outfile = open("adverts_NewAtlant.xml", "a")
- outfile.write('\n</user>\n \
- </users>')
- outfile.close()
Advertisement
Add Comment
Please, Sign In to add comment