String indices must be integers (спасите меня от этой ошибки) - Python

Узнай цену своей работы

Формулировка задачи:

Всем привет,вообщем написал парсер , и долго боролся с картинкой(не мог подтянуть), только поборол эту проблему , как выскочила другая. теперь не могу записать данные в ексель из-за

string indices must be integers

Вот весь код
Листинг программы
  1. url = 'https://www.lampa.kiev.ua/ua/katalog/searchANJA+X'
  2. def get_html(url):
  3. html = requests.get(url)
  4. return html
  5.  
  6. def get_page_data(html):
  7. tf = ''
  8. lamp = tf
  9. socle = tf
  10. group = 'Люстри'
  11. country = 'Чехія'
  12. design = 'класичний'
  13. soup = BeautifulSoup(html.text)
  14. info = soup.find('div', class_='catalog_hr')#.find_all('b')[5].text
  15. tovname = soup.find('div', class_='catalog_tovname').find('a').text
  16. index = re.findall('(\d+)',tovname )
  17. for ad in info:
  18. try:
  19. heightm = ad.find('b')[2].text
  20. except:
  21. heightm = ''
  22. try:
  23. width = ad.find('b')[3].text
  24. except:
  25. width = ''
  26. try:
  27. in_lamp = ad.find('b')[4]
  28. lamp = in_lamp.split('x')[0]
  29. socle = in_lamp.split('x')[1]
  30. except:
  31. in_lamp = ''
  32. try:
  33. color_stl = ad.find('b')[7].text
  34. except:
  35. color_stl = ''
  36. try:
  37. type_stl = ad.find('b')[8].text
  38. except:
  39. type_stl = ''
  40. try:
  41. color_lamp = ad.find('b')[9].text
  42. except:
  43. color_lamp = ''
  44. try:
  45. type_lamp = ad.find('b')[10].text
  46. except:
  47. type_lamp = ''
  48. try:
  49. maker = ad.find('b')[12].text
  50. except:
  51. maker = ''
  52. data = {'index': index,
  53. 'name': tf,
  54. 'group': group,
  55. 'description': tf,
  56. 'maker': maker,
  57. 'country': country,
  58. 'design': design,
  59. 'lamp': lamp,
  60. 'socle': socle,
  61. 'color_lamp': color_lamp,
  62. 'type_lamp': type_lamp,
  63. 'color_stl': color_stl,
  64. 'type_stl': type_stl,
  65. 'heightm': heightm,
  66. 'width': width,
  67. 'depth':heightm}
  68. return data
  69.  
  70. def export_excel(filename , datas):
  71. workbook = xlsxwriter.Workbook(filename)
  72. worksheet = workbook.add_worksheet()
  73. field_names = ('код товару',
  74. 'назва серії, модель',
  75. 'група товару для сайту',
  76. 'опис',
  77. 'виробник',
  78. 'країна',
  79. 'дизайн',
  80. 'кількість патронів',
  81. 'цоколь',
  82. 'колір плафона',
  83. 'матеріал плафона',
  84. 'колір арматури',
  85. 'матеріал арматури',
  86. 'розмір (см) Ш',
  87. 'розмір (см) В',
  88. 'розмір (см) Г',
  89. 'фото')
  90. for i ,field in enumerate(field_names):
  91. worksheet.write(0, i, field)
  92. fields = ('index', 'name', 'group',
  93. 'description', 'maker','country',
  94. 'design', 'lamp', 'socle', 'color_lamp',
  95. 'type_lamp','color_stl','type_stl',
  96. 'heightm','width','depth')
  97. for row, data in enumerate(datas, start=1):
  98. print(row)
  99. print(data)
  100. for col, field in enumerate(fields):
  101. print(col)
  102. print(field)
  103. worksheet.write(row, col, data[field])
  104. workbook.close()
  105. def main():
  106. url = 'https://www.lampa.kiev.ua/ua/katalog/searchANJA+X'
  107. html = get_html(url)
  108. datas = get_page_data(html)
  109. print(datas)
  110. export_excel('data.xlsx', datas)
Именно на этой строке вылетает ошибка
Листинг программы
  1. worksheet.write(row, col, data[field])
Подскажите что тут можно сделать , я читал про обходы строк , но толи не до конца понимаю толи мне тут это не подходит. Вообщем подскажите что мне с этим делать. А ну и сами ошибки
Листинг программы
  1. Traceback (most recent call last):
  2. File "C:/Users/игор/Desktop/4Wscript/test.py", line 135, in <module>
  3. main()
  4. File "C:/Users/игор/Desktop/4Wscript/test.py", line 132, in main
  5. export_excel('data.xlsx', datas)
  6. File "C:/Users/игор/Desktop/4Wscript/test.py", line 123, in export_excel
  7. worksheet.write(row, col, data[field])
  8. TypeError: string indices must be integers

Решение задачи: «String indices must be integers (спасите меня от этой ошибки)»

textual
Листинг программы
  1. tovname = soup.find('div', class_='catalog_tovname').find('a').text
  2.     index = re.findall('(\d+)',tovname )

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы