Advertisement
Guest User

Untitled

a guest
Jan 20th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.11 KB | None | 0 0
  1. import requests
  2. from bs4 import BeautifulSoup
  3. import xlwt
  4.  
  5. base_url = 'http://www.probankrot.ru/node/'
  6.  
  7. file_name_dir = 'd:\\parsing\\'
  8.  
  9. start_id = 1137718
  10.  
  11.  
  12. stop_id = 1146595
  13.  
  14. #240913
  15.  
  16. #test_start 30 000 14-33
  17.  
  18.  
  19. cookies = dict(has_js='1', _ym_uid='1478644484684538441', _ga='GA1.2.217895697.1478644484', _ym_isad='1',
  20. _ym_visorc_28334906='w',
  21. SESSa173b0bdcae299427c4087d7f72d00db='bXmvKQe6AYlLDBebWoHipA2AUhFHjmpi8V25zF1RvB4', gat='1')
  22.  
  23.  
  24. def get_html(url):
  25. r = requests.get(url, cookies=cookies)
  26. return r.text
  27.  
  28.  
  29. # не забываем про куки
  30. # Если нужно будет работать с аукционами допиши даты приема заявок(для публичных приложений не нужно)
  31. def parser(html):
  32. pars_data = {}
  33. # 1)Статус торгов 2)Номер лота, 3)Вид лота
  34. # 4)Цена лота 5)Текущая/Итоговая цена 6)Минимальная цена
  35. # 7) Предмет торгов (не забудь подправить дублироание и лишнюю инфу)
  36. # 8) Регион 9) Ссылка на лот в федресурсе 10) Ссылка на лот на площадке
  37. # 11)Дата начала торгов 12)Дата окончания торгов
  38. pars_data_list = []
  39. soup = BeautifulSoup(html, 'html.parser')
  40. node_panel = soup.find(class_='node_panel')
  41. if node_panel is None:
  42. pars_data_list = []
  43. else:
  44. node_panel = soup.find(class_='node_panel')
  45. if node_panel.find(class_='lot_status') is None:
  46. pars_data_list = []
  47. else:
  48. lot_status = node_panel.find(class_='lot_status')
  49. lot_status = lot_status.get_text()
  50. lot_status = lot_status.strip()
  51. pars_data_list.append(lot_status)
  52. lot_card_node = node_panel.find(class_='lot_card_node')
  53. nomer_lota = lot_card_node.find(class_='nomer_lota')
  54. nomer_lota = nomer_lota.string
  55. nomer_lota = nomer_lota[(nomer_lota.find('№') + 1):]
  56. nomer_lota = nomer_lota.strip()
  57. pars_data_list.append(nomer_lota)
  58. s_vid_lota = node_panel.find(class_='s_vid_lota')
  59. s_vid_lota = s_vid_lota.find(class_='s_vid_lota')
  60. s_vid_lota = s_vid_lota.string
  61. s_vid_lota = s_vid_lota.strip()
  62. pars_data_list.append(s_vid_lota)
  63. s_start_price = node_panel.find(class_='s_start_price')
  64. s_start_price = s_start_price.string
  65. s_start_price = s_start_price.strip()
  66. pars_data_list.append(s_start_price)
  67. s_now_price = node_panel.find(class_='s_prices')
  68. s_now_price = s_now_price.find(class_='s_now_price')
  69. s_now_price = s_now_price.find(class_='s_prices_value')
  70. if s_now_price is None:
  71. s_now_price = 'Не изестно'
  72. pars_data_list.append(s_now_price)
  73. else:
  74. s_now_price = s_now_price.string
  75. s_now_price = s_now_price.strip()
  76. pars_data_list.append(s_now_price)
  77. s_min_price = node_panel.find(class_='s_prices')
  78. s_min_price = s_min_price.find(class_='s_min_price')
  79. s_min_price = s_min_price.find(class_='s_prices_value')
  80. if s_min_price is None:
  81. s_min_price = 'Не известно'
  82. pars_data_list.append(s_min_price)
  83. else:
  84. s_min_price = s_min_price.string
  85. s_min_price = s_min_price.strip()
  86. pars_data_list.append(s_min_price)
  87. node_sl_first = node_panel.find(class_='node_sl_first')
  88. predmet_torgov = node_sl_first.find(class_='predmet_torgov')
  89. predmet_torgov = predmet_torgov.get_text()
  90. predmet_torgov_one_str = ''
  91. for i in predmet_torgov.split('\n'):
  92. predmet_torgov_one_str += i + ' '
  93. pars_data_list.append(predmet_torgov_one_str)
  94. s_debtor = node_panel.find(class_='node_sl_first')
  95. s_debtor = s_debtor.find(class_='s_debtor')
  96. s_debtor = s_debtor.string
  97. s_debtor = s_debtor.strip()
  98. if s_debtor.find('Регион:') is not None:
  99. s_debtor = s_debtor[(s_debtor.find('Регион:') + len('Регион:')):]
  100. s_debtor = s_debtor.strip()
  101. else:
  102. s_debtor = s_debtor
  103. pars_data_list.append(s_debtor)
  104. fedrerurs_link = node_panel.find(class_='lot_card_node')
  105. fedrerurs_link = fedrerurs_link.find(id='node_tabs')
  106. if fedrerurs_link.find(title='Страница лота на ЕФРСБ') is not None:
  107. fedrerurs_link = fedrerurs_link.find(title='Страница лота на ЕФРСБ')
  108. fedrerurs_link = fedrerurs_link['href']
  109. pars_data_list.append(fedrerurs_link)
  110. else:
  111. fedrerurs_link = 'Нет'
  112. pars_data_list.append(fedrerurs_link)
  113. area_link = node_panel.find(class_='lot_card_node')
  114. area_link = area_link.find(id='node_tabs')
  115. if area_link.find(title='Страница лота на площадке') is not None:
  116. area_link = area_link.find(title='Страница лота на площадке')
  117. area_link = area_link['href']
  118. pars_data_list.append(area_link)
  119. else:
  120. area_link = 'Нет'
  121. pars_data_list.append(area_link)
  122. begin_date = node_panel.find(id='dates')
  123. begin_date = begin_date.find(class_='dates_data_torgov')
  124. if begin_date is None:
  125. begin_date = 'Не известно'
  126. pars_data_list.append(begin_date)
  127. else:
  128. if begin_date.find(class_='date-display-start') is None:
  129. begin_date = 'Не известно'
  130. pars_data_list.append(begin_date)
  131. else:
  132. begin_date = begin_date.find(class_='date-display-start')
  133. begin_date = begin_date.string
  134. begin_date = begin_date.strip()
  135. pars_data_list.append(begin_date)
  136. end_date = node_panel.find(id='dates')
  137. end_date = end_date.find(class_='dates_data_torgov')
  138. if end_date is None:
  139. end_date = 'Не изестно'
  140. pars_data_list.append(end_date)
  141. else:
  142. if end_date is None:
  143. end_date = 'Не изестно'
  144. pars_data_list.append(end_date)
  145. else:
  146. if end_date.find(class_='date-display-end') is None:
  147. end_date = 'Не изестно'
  148. pars_data_list.append(end_date)
  149. else:
  150. end_date = end_date.find(class_='date-display-end')
  151. end_date = end_date.string
  152. end_date = end_date.strip()
  153. pars_data_list.append(end_date)
  154.  
  155. return pars_data_list
  156.  
  157.  
  158. # Создаем словарь c распарсенными данными
  159. trade_card_dic = {}
  160. # Создаем список с колонками
  161. columns_list = ['Статус торгов', 'Номер лота', 'Вид лота', 'Цена лота',
  162. 'Текущая/Итоговая цена', 'Минимальная цена', 'Предмет торгов', 'Регион',
  163. 'Ссылка на лот на федресурсе', 'Ссылка на лот на площадке', 'Дата начала торгов',
  164. 'Дата окончания торгов']
  165.  
  166.  
  167. def exel_export(dict):
  168. counter = 0
  169. wb = xlwt.Workbook()
  170. ws = wb.add_sheet('test')
  171.  
  172. font0 = xlwt.Font()
  173. font0.name = 'Times New Roman'
  174. font0.colour_index = 255
  175. font0.height = 280
  176. font0.bold = True
  177.  
  178. font1 = xlwt.Font()
  179. font1.name = 'Times New Roman'
  180. font1.colour_index = 0
  181. font1.height = 100
  182. font1.bold = False
  183.  
  184. style0 = xlwt.XFStyle()
  185. style0.font = font0
  186.  
  187. style1 = xlwt.XFStyle()
  188. style1.font = font1
  189. # пишем шапку
  190. for i in range(0, len(columns_list)):
  191. ws.write(0, i, columns_list[i])
  192. counter += 1
  193. for i in dict:
  194. for j in range(0, len(dict.get(i))):
  195. ws.write(counter, j, dict.get(i)[j])
  196. counter += 1
  197. wb.save(file_name_dir + 'test.xls')
  198.  
  199.  
  200.  
  201. while start_id != stop_id:
  202. print(start_id)
  203. html = get_html(base_url + str(start_id))
  204. if html.find('Доступ запрещен') != -1:
  205. start_id += 1
  206. else:
  207. trade_card_dic.setdefault(start_id)
  208. trade_card_dic[start_id] = parser(html)
  209. if trade_card_dic[start_id] == []:
  210. trade_card_dic.pop(start_id)
  211. start_id += 1
  212. else:
  213. start_id += 1
  214.  
  215. exel_export(trade_card_dic)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement