IKEA сбор новых и редактирование категорий

This commit is contained in:
va1is 2025-09-01 16:57:29 +03:00
parent 18dcf08319
commit ff136afe05
103 changed files with 70955 additions and 59 deletions

Binary file not shown.

View File

@ -0,0 +1,188 @@
2025-08-26 11:11:49,973 INFO Category start: category-bathroomaccessories — https://www.next.pl/en/shop/home/bathroom/bathroom-accessories/f/category-bathroomaccessories
2025-08-26 11:11:52,723 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081152_722993_after_goto.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081152_722993_after_goto.png
2025-08-26 11:11:53,293 INFO [dump_debug] saved OK: 20250826_081152_722993_after_goto.html, 20250826_081152_722993_after_goto.png
2025-08-26 11:11:53,348 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081153_347996_after_cookies.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081153_347996_after_cookies.png
2025-08-26 11:11:53,659 INFO [dump_debug] saved OK: 20250826_081153_347996_after_cookies.html, 20250826_081153_347996_after_cookies.png
2025-08-26 11:11:53,694 INFO [after_accept] scripts: 12, window.ps: False
2025-08-26 11:11:54,671 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081154_671358_after_warmup.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081154_671358_after_warmup.png
2025-08-26 11:11:55,369 INFO [dump_debug] saved OK: 20250826_081154_671358_after_warmup.html, 20250826_081154_671358_after_warmup.png
2025-08-26 11:11:55,385 INFO [after_warmup] scripts: 48, window.ps: False
2025-08-26 11:11:55,408 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081155_408793_after_scripts_present.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081155_408793_after_scripts_present.png
2025-08-26 11:11:56,004 INFO [dump_debug] saved OK: 20250826_081155_408793_after_scripts_present.html, 20250826_081155_408793_after_scripts_present.png
2025-08-26 11:12:01,009 INFO window.ssrClientSettings not ready (non-fatal).
2025-08-26 11:12:01,010 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081201_009973_after_window_check.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081201_009973_after_window_check.png
2025-08-26 11:12:01,491 INFO [dump_debug] saved OK: 20250826_081201_009973_after_window_check.html, 20250826_081201_009973_after_window_check.png
2025-08-26 11:12:01,531 INFO Total from header: 67
2025-08-26 11:12:02,478 INFO Reached target: seen 67/67 (i=4)
2025-08-26 11:12:02,479 INFO Final seen items: 60 (target=67, cap=2500)
2025-08-26 11:12:02,576 INFO SSR(scripts) summaries: 0
2025-08-26 11:12:02,600 INFO DOM cards parsed: 67
2025-08-26 11:12:02,606 INFO Total collected (SSR+DOM): 67
2025-08-26 11:15:06,490 INFO ✔ category-bathroomaccessories: 67 товаров → records_folder/next_dump_20250826_111506.xlsx
2025-08-26 11:15:06,490 INFO Category start: category-toiletrollholders — https://www.next.pl/en/shop/home/bathroom/bathroom-accessories/f/category-toiletrollholders
2025-08-26 11:15:07,881 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081507_881071_after_goto.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081507_881071_after_goto.png
2025-08-26 11:15:08,345 INFO [dump_debug] saved OK: 20250826_081507_881071_after_goto.html, 20250826_081507_881071_after_goto.png
2025-08-26 11:15:08,856 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081508_856122_after_cookies.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081508_856122_after_cookies.png
2025-08-26 11:15:09,233 INFO [dump_debug] saved OK: 20250826_081508_856122_after_cookies.html, 20250826_081508_856122_after_cookies.png
2025-08-26 11:15:09,465 INFO [after_accept] scripts: 12, window.ps: False
2025-08-26 11:15:10,796 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081510_796457_after_warmup.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081510_796457_after_warmup.png
2025-08-26 11:15:11,814 INFO [dump_debug] saved OK: 20250826_081510_796457_after_warmup.html, 20250826_081510_796457_after_warmup.png
2025-08-26 11:15:11,843 INFO [after_warmup] scripts: 48, window.ps: False
2025-08-26 11:15:11,858 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081511_857930_after_scripts_present.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081511_857930_after_scripts_present.png
2025-08-26 11:15:12,469 INFO [dump_debug] saved OK: 20250826_081511_857930_after_scripts_present.html, 20250826_081511_857930_after_scripts_present.png
2025-08-26 11:15:17,473 INFO window.ssrClientSettings not ready (non-fatal).
2025-08-26 11:15:17,474 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081517_474237_after_window_check.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081517_474237_after_window_check.png
2025-08-26 11:15:18,061 INFO [dump_debug] saved OK: 20250826_081517_474237_after_window_check.html, 20250826_081517_474237_after_window_check.png
2025-08-26 11:15:18,115 INFO Total from header: 62
2025-08-26 11:15:18,816 INFO Reached target: seen 62/62 (i=2)
2025-08-26 11:15:18,817 INFO Final seen items: 60 (target=62, cap=2500)
2025-08-26 11:15:18,999 INFO SSR(scripts) summaries: 0
2025-08-26 11:15:19,073 INFO DOM cards parsed: 62
2025-08-26 11:15:19,078 INFO Total collected (SSR+DOM): 62
2025-08-26 11:18:22,782 INFO ✔ category-toiletrollholders: 62 товаров → records_folder/next_dump_20250826_111822.xlsx
2025-08-26 11:18:22,782 INFO Category start: category-ornaments — https://www.next.pl/en/shop/home/bathroom/bathroom-accessories/f/category-ornaments
2025-08-26 11:18:24,382 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081824_381903_after_goto.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081824_381903_after_goto.png
2025-08-26 11:18:24,713 INFO [dump_debug] saved OK: 20250826_081824_381903_after_goto.html, 20250826_081824_381903_after_goto.png
2025-08-26 11:18:25,203 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081825_203312_after_cookies.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081825_203312_after_cookies.png
2025-08-26 11:18:25,732 INFO [dump_debug] saved OK: 20250826_081825_203312_after_cookies.html, 20250826_081825_203312_after_cookies.png
2025-08-26 11:18:25,930 INFO [after_accept] scripts: 12, window.ps: False
2025-08-26 11:18:27,095 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081827_095356_after_warmup.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081827_095356_after_warmup.png
2025-08-26 11:18:28,114 INFO [dump_debug] saved OK: 20250826_081827_095356_after_warmup.html, 20250826_081827_095356_after_warmup.png
2025-08-26 11:18:28,173 INFO [after_warmup] scripts: 36, window.ps: False
2025-08-26 11:18:28,190 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081828_189913_after_scripts_present.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081828_189913_after_scripts_present.png
2025-08-26 11:18:28,664 INFO [dump_debug] saved OK: 20250826_081828_189913_after_scripts_present.html, 20250826_081828_189913_after_scripts_present.png
2025-08-26 11:18:33,671 INFO window.ssrClientSettings not ready (non-fatal).
2025-08-26 11:18:33,672 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081833_672277_after_window_check.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_081833_672277_after_window_check.png
2025-08-26 11:18:34,110 INFO [dump_debug] saved OK: 20250826_081833_672277_after_window_check.html, 20250826_081833_672277_after_window_check.png
2025-08-26 11:18:34,122 INFO Total from header: 58
2025-08-26 11:18:35,306 INFO Reached target: seen 58/58 (i=4)
2025-08-26 11:18:35,306 INFO Final seen items: 48 (target=58, cap=2500)
2025-08-26 11:18:35,363 INFO SSR(scripts) summaries: 0
2025-08-26 11:18:35,387 INFO DOM cards parsed: 58
2025-08-26 11:18:35,391 INFO Total collected (SSR+DOM): 58
2025-08-26 11:21:21,373 INFO ✔ category-ornaments: 58 товаров → records_folder/next_dump_20250826_112121.xlsx
2025-08-26 11:21:21,374 INFO Category start: category-toiletbrushes — https://www.next.pl/en/shop/home/bathroom/bathroom-accessories/f/category-toiletbrushes
2025-08-26 11:21:23,733 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082123_732422_after_goto.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082123_732422_after_goto.png
2025-08-26 11:21:24,536 INFO [dump_debug] saved OK: 20250826_082123_732422_after_goto.html, 20250826_082123_732422_after_goto.png
2025-08-26 11:21:24,751 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082124_751547_after_cookies.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082124_751547_after_cookies.png
2025-08-26 11:21:25,131 INFO [dump_debug] saved OK: 20250826_082124_751547_after_cookies.html, 20250826_082124_751547_after_cookies.png
2025-08-26 11:21:25,142 INFO [after_accept] scripts: 12, window.ps: False
2025-08-26 11:21:26,176 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082126_175634_after_warmup.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082126_175634_after_warmup.png
2025-08-26 11:21:27,002 INFO [dump_debug] saved OK: 20250826_082126_175634_after_warmup.html, 20250826_082126_175634_after_warmup.png
2025-08-26 11:21:27,043 INFO [after_warmup] scripts: 36, window.ps: False
2025-08-26 11:21:27,066 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082127_066044_after_scripts_present.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082127_066044_after_scripts_present.png
2025-08-26 11:21:27,598 INFO [dump_debug] saved OK: 20250826_082127_066044_after_scripts_present.html, 20250826_082127_066044_after_scripts_present.png
2025-08-26 11:21:32,603 INFO window.ssrClientSettings not ready (non-fatal).
2025-08-26 11:21:32,604 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082132_603713_after_window_check.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082132_603713_after_window_check.png
2025-08-26 11:21:33,106 INFO [dump_debug] saved OK: 20250826_082132_603713_after_window_check.html, 20250826_082132_603713_after_window_check.png
2025-08-26 11:21:33,156 INFO Total from header: 36
2025-08-26 11:21:33,331 INFO Reached target: seen 36/36 (i=0)
2025-08-26 11:21:33,331 INFO Final seen items: 0 (target=36, cap=2500)
2025-08-26 11:21:33,365 INFO SSR(scripts) summaries: 0
2025-08-26 11:21:33,379 INFO DOM cards parsed: 36
2025-08-26 11:21:33,382 INFO Total collected (SSR+DOM): 36
2025-08-26 11:23:30,037 INFO ✔ category-toiletbrushes: 36 товаров → records_folder/next_dump_20250826_112330.xlsx
2025-08-26 11:23:30,037 INFO Category start: category-towelrails — https://www.next.pl/en/shop/home/bathroom/bathroom-accessories/f/category-towelrails
2025-08-26 11:23:32,219 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082332_219443_after_goto.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082332_219443_after_goto.png
2025-08-26 11:23:33,201 INFO [dump_debug] saved OK: 20250826_082332_219443_after_goto.html, 20250826_082332_219443_after_goto.png
2025-08-26 11:23:33,271 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082333_270928_after_cookies.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082333_270928_after_cookies.png
2025-08-26 11:23:33,512 INFO [dump_debug] saved OK: 20250826_082333_270928_after_cookies.html, 20250826_082333_270928_after_cookies.png
2025-08-26 11:23:33,631 INFO [after_accept] scripts: 12, window.ps: False
2025-08-26 11:23:34,892 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082334_892715_after_warmup.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082334_892715_after_warmup.png
2025-08-26 11:23:35,589 INFO [dump_debug] saved OK: 20250826_082334_892715_after_warmup.html, 20250826_082334_892715_after_warmup.png
2025-08-26 11:23:35,601 INFO [after_warmup] scripts: 34, window.ps: False
2025-08-26 11:23:35,628 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082335_628381_after_scripts_present.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082335_628381_after_scripts_present.png
2025-08-26 11:23:36,101 INFO [dump_debug] saved OK: 20250826_082335_628381_after_scripts_present.html, 20250826_082335_628381_after_scripts_present.png
2025-08-26 11:23:41,106 INFO window.ssrClientSettings not ready (non-fatal).
2025-08-26 11:23:41,107 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082341_107237_after_window_check.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082341_107237_after_window_check.png
2025-08-26 11:23:41,502 INFO [dump_debug] saved OK: 20250826_082341_107237_after_window_check.html, 20250826_082341_107237_after_window_check.png
2025-08-26 11:23:41,514 INFO Total from header: 34
2025-08-26 11:23:41,698 INFO Reached target: seen 34/34 (i=0)
2025-08-26 11:23:41,698 INFO Final seen items: 0 (target=34, cap=2500)
2025-08-26 11:23:41,725 INFO SSR(scripts) summaries: 0
2025-08-26 11:23:41,739 INFO DOM cards parsed: 34
2025-08-26 11:23:41,742 INFO Total collected (SSR+DOM): 34
2025-08-26 11:25:30,375 INFO ✔ category-towelrails: 34 товаров → records_folder/next_dump_20250826_112530.xlsx
2025-08-26 11:25:30,375 INFO Category start: category-showercaddy — https://www.next.pl/en/shop/home/bathroom/bathroom-accessories/f/category-showercaddy
2025-08-26 11:25:33,205 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082533_205048_after_goto.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082533_205048_after_goto.png
2025-08-26 11:25:33,909 INFO [dump_debug] saved OK: 20250826_082533_205048_after_goto.html, 20250826_082533_205048_after_goto.png
2025-08-26 11:25:34,090 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082534_088587_after_cookies.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082534_088587_after_cookies.png
2025-08-26 11:25:34,352 INFO [dump_debug] saved OK: 20250826_082534_088587_after_cookies.html, 20250826_082534_088587_after_cookies.png
2025-08-26 11:25:34,368 INFO [after_accept] scripts: 12, window.ps: False
2025-08-26 11:25:35,590 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082535_590259_after_warmup.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082535_590259_after_warmup.png
2025-08-26 11:25:36,117 INFO [dump_debug] saved OK: 20250826_082535_590259_after_warmup.html, 20250826_082535_590259_after_warmup.png
2025-08-26 11:25:36,143 INFO [after_warmup] scripts: 32, window.ps: False
2025-08-26 11:25:36,154 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082536_154156_after_scripts_present.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082536_154156_after_scripts_present.png
2025-08-26 11:25:36,567 INFO [dump_debug] saved OK: 20250826_082536_154156_after_scripts_present.html, 20250826_082536_154156_after_scripts_present.png
2025-08-26 11:25:41,573 INFO window.ssrClientSettings not ready (non-fatal).
2025-08-26 11:25:41,573 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082541_573556_after_window_check.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082541_573556_after_window_check.png
2025-08-26 11:25:41,985 INFO [dump_debug] saved OK: 20250826_082541_573556_after_window_check.html, 20250826_082541_573556_after_window_check.png
2025-08-26 11:25:41,996 INFO Total from header: 32
2025-08-26 11:25:42,200 INFO Reached target: seen 32/32 (i=0)
2025-08-26 11:25:42,200 INFO Final seen items: 0 (target=32, cap=2500)
2025-08-26 11:25:42,252 INFO SSR(scripts) summaries: 0
2025-08-26 11:25:42,272 INFO DOM cards parsed: 32
2025-08-26 11:25:42,276 INFO Total collected (SSR+DOM): 32
2025-08-26 11:27:28,017 INFO ✔ category-showercaddy: 32 товаров → records_folder/next_dump_20250826_112727.xlsx
2025-08-26 11:27:28,017 INFO Category start: category-soapdispensers — https://www.next.pl/en/shop/home/bathroom/bathroom-accessories/f/category-soapdispensers
2025-08-26 11:27:30,102 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082730_102142_after_goto.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082730_102142_after_goto.png
2025-08-26 11:27:30,426 INFO [dump_debug] saved OK: 20250826_082730_102142_after_goto.html, 20250826_082730_102142_after_goto.png
2025-08-26 11:27:30,916 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082730_916653_after_cookies.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082730_916653_after_cookies.png
2025-08-26 11:27:31,357 INFO [dump_debug] saved OK: 20250826_082730_916653_after_cookies.html, 20250826_082730_916653_after_cookies.png
2025-08-26 11:27:31,372 INFO [after_accept] scripts: 12, window.ps: False
2025-08-26 11:27:32,426 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082732_426065_after_warmup.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082732_426065_after_warmup.png
2025-08-26 11:27:33,108 INFO [dump_debug] saved OK: 20250826_082732_426065_after_warmup.html, 20250826_082732_426065_after_warmup.png
2025-08-26 11:27:33,153 INFO [after_warmup] scripts: 31, window.ps: False
2025-08-26 11:27:33,439 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082733_439141_after_scripts_present.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082733_439141_after_scripts_present.png
2025-08-26 11:27:33,869 INFO [dump_debug] saved OK: 20250826_082733_439141_after_scripts_present.html, 20250826_082733_439141_after_scripts_present.png
2025-08-26 11:27:38,875 INFO window.ssrClientSettings not ready (non-fatal).
2025-08-26 11:27:38,876 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082738_876086_after_window_check.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082738_876086_after_window_check.png
2025-08-26 11:27:39,228 INFO [dump_debug] saved OK: 20250826_082738_876086_after_window_check.html, 20250826_082738_876086_after_window_check.png
2025-08-26 11:27:39,241 INFO Total from header: 31
2025-08-26 11:27:39,440 INFO Reached target: seen 31/31 (i=0)
2025-08-26 11:27:39,441 INFO Final seen items: 0 (target=31, cap=2500)
2025-08-26 11:27:39,466 INFO SSR(scripts) summaries: 0
2025-08-26 11:27:39,480 INFO DOM cards parsed: 31
2025-08-26 11:27:39,482 INFO Total collected (SSR+DOM): 31
2025-08-26 11:29:53,592 INFO ✔ category-soapdispensers: 31 товаров → records_folder/next_dump_20250826_112953.xlsx
2025-08-26 11:29:53,592 INFO Category start: category-toothbrushtidy — https://www.next.pl/en/shop/home/bathroom/bathroom-accessories/f/category-toothbrushtidy
2025-08-26 11:29:56,736 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082956_735948_after_goto.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082956_735948_after_goto.png
2025-08-26 11:29:57,112 INFO [dump_debug] saved OK: 20250826_082956_735948_after_goto.html, 20250826_082956_735948_after_goto.png
2025-08-26 11:29:57,163 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082957_163134_after_cookies.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082957_163134_after_cookies.png
2025-08-26 11:29:57,363 INFO [dump_debug] saved OK: 20250826_082957_163134_after_cookies.html, 20250826_082957_163134_after_cookies.png
2025-08-26 11:29:57,372 INFO [after_accept] scripts: 12, window.ps: False
2025-08-26 11:29:58,440 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082958_440510_after_warmup.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082958_440510_after_warmup.png
2025-08-26 11:29:59,124 INFO [dump_debug] saved OK: 20250826_082958_440510_after_warmup.html, 20250826_082958_440510_after_warmup.png
2025-08-26 11:29:59,169 INFO [after_warmup] scripts: 32, window.ps: False
2025-08-26 11:29:59,216 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082959_216457_after_scripts_present.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_082959_216457_after_scripts_present.png
2025-08-26 11:29:59,686 INFO [dump_debug] saved OK: 20250826_082959_216457_after_scripts_present.html, 20250826_082959_216457_after_scripts_present.png
2025-08-26 11:30:04,692 INFO window.ssrClientSettings not ready (non-fatal).
2025-08-26 11:30:04,693 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_083004_693216_after_window_check.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_083004_693216_after_window_check.png
2025-08-26 11:30:05,503 INFO [dump_debug] saved OK: 20250826_083004_693216_after_window_check.html, 20250826_083004_693216_after_window_check.png
2025-08-26 11:30:05,525 INFO Total from header: 32
2025-08-26 11:30:05,684 INFO Reached target: seen 32/32 (i=0)
2025-08-26 11:30:05,685 INFO Final seen items: 0 (target=32, cap=2500)
2025-08-26 11:30:05,723 INFO SSR(scripts) summaries: 0
2025-08-26 11:30:05,743 INFO DOM cards parsed: 32
2025-08-26 11:30:05,747 INFO Total collected (SSR+DOM): 32
2025-08-26 11:32:40,930 INFO ✔ category-toothbrushtidy: 32 товаров → records_folder/next_dump_20250826_113240.xlsx
2025-08-26 11:32:40,930 INFO Category start: category-mirrors — https://www.next.pl/en/shop/home/bathroom/bathroom-accessories/f/category-mirrors
2025-08-26 11:32:44,062 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_083244_061879_after_goto.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_083244_061879_after_goto.png
2025-08-26 11:32:44,453 INFO [dump_debug] saved OK: 20250826_083244_061879_after_goto.html, 20250826_083244_061879_after_goto.png
2025-08-26 11:32:44,479 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_083244_479324_after_cookies.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_083244_479324_after_cookies.png
2025-08-26 11:32:44,698 INFO [dump_debug] saved OK: 20250826_083244_479324_after_cookies.html, 20250826_083244_479324_after_cookies.png
2025-08-26 11:32:44,724 INFO [after_accept] scripts: 12, window.ps: False
2025-08-26 11:32:45,978 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_083245_977680_after_warmup.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_083245_977680_after_warmup.png
2025-08-26 11:32:46,580 INFO [dump_debug] saved OK: 20250826_083245_977680_after_warmup.html, 20250826_083245_977680_after_warmup.png
2025-08-26 11:32:46,611 INFO [after_warmup] scripts: 27, window.ps: False
2025-08-26 11:32:46,649 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_083246_649499_after_scripts_present.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_083246_649499_after_scripts_present.png
2025-08-26 11:32:47,032 INFO [dump_debug] saved OK: 20250826_083246_649499_after_scripts_present.html, 20250826_083246_649499_after_scripts_present.png
2025-08-26 11:32:52,035 INFO window.ssrClientSettings not ready (non-fatal).
2025-08-26 11:32:52,036 INFO [dump_debug] CWD=/Users/valis/MacOS_Parsers/Parser_NEXT → html=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_083252_036049_after_window_check.html png=/Users/valis/MacOS_Parsers/Parser_NEXT/out/raw_html/20250826_083252_036049_after_window_check.png
2025-08-26 11:32:52,824 INFO [dump_debug] saved OK: 20250826_083252_036049_after_window_check.html, 20250826_083252_036049_after_window_check.png
2025-08-26 11:32:52,845 INFO Total from header: 27
2025-08-26 11:32:53,022 INFO Reached target: seen 27/27 (i=0)
2025-08-26 11:32:53,023 INFO Final seen items: 0 (target=27, cap=2500)
2025-08-26 11:32:53,076 INFO SSR(scripts) summaries: 0
2025-08-26 11:32:53,109 INFO DOM cards parsed: 27
2025-08-26 11:32:53,111 INFO Total collected (SSR+DOM): 27

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 525 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 525 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

View File

@ -24,6 +24,49 @@ def log(msg: str):
def is_temp_or_hidden(name: str) -> bool: def is_temp_or_hidden(name: str) -> bool:
return name.startswith('~$') or name.startswith('.') return name.startswith('~$') or name.startswith('.')
def build_ozonart(df: pd.DataFrame) -> pd.DataFrame:
"""
Создаёт/перезаписывает колонку OZONart по правилу:
- если оба значения (Артикул, PartNumber) непустые -> 'Артикул-PartNumber'
- иначе -> ''
Под "пустым" понимаем NaN/None/пустая строка/строка из пробелов.
"""
if 'Артикул' not in df.columns or 'PartNumber' not in df.columns:
# Если вдруг где-то нет нужных колонок — оставим пустую OZONart и залогируем
if 'OZONart' not in df.columns:
df['OZONart'] = ''
log('ПРЕДУПРЕЖДЕНИЕ: Отсутствует колонка "Артикул" или "PartNumber" — OZONart заполнен пустыми значениями.')
return df
art = df['Артикул']
part = df['PartNumber']
# Признак непустоты: не NaN и не пустая строка после strip()
art_nonempty = art.notna() & art.astype(str).str.strip().ne('')
part_nonempty = part.notna() & part.astype(str).str.strip().ne('')
mask = art_nonempty & part_nonempty
# По умолчанию — пустые строки
ozon = pd.Series([''] * len(df), index=df.index, dtype=object)
# Там, где оба непустые — склейка
ozon.loc[mask] = art.loc[mask].astype(str).str.strip() + '-' + part.loc[mask].astype(str).str.strip()
df['OZONart'] = ozon
# Попробуем разместить OZONart сразу после PartNumber
try:
cols = list(df.columns)
if 'OZONart' in cols and 'PartNumber' in cols:
cols.remove('OZONart')
idx = cols.index('PartNumber') + 1
cols.insert(idx, 'OZONart')
df = df.reindex(columns=cols)
except Exception:
# Не критично — просто оставим как есть
pass
return df
# === Пути === # === Пути ===
script_dir = get_script_dir() script_dir = get_script_dir()
folder_path = os.path.join(script_dir, 'Files-todo') folder_path = os.path.join(script_dir, 'Files-todo')
@ -77,13 +120,17 @@ def main():
log(f'ПРЕДУПРЕЖДЕНИЕ: Пустой файл — пропуск: {fname}') log(f'ПРЕДУПРЕЖДЕНИЕ: Пустой файл — пропуск: {fname}')
continue continue
# Добавляем колонку OZONart согласно правилу
df = build_ozonart(df)
# Зафиксируем исходный порядок колонок первого удачного файла
if not all_columns: if not all_columns:
for c in df.columns: for c in df.columns:
if c not in seen_cols: if c not in seen_cols:
all_columns.append(c) all_columns.append(c)
seen_cols.add(c) seen_cols.add(c)
# Добавляем источники # Добавляем служебные источники
stem, _ = os.path.splitext(fname) stem, _ = os.path.splitext(fname)
df['SourceFile'] = fname df['SourceFile'] = fname
df['SourceFileUrl'] = BASE_URL + stem df['SourceFileUrl'] = BASE_URL + stem
@ -102,11 +149,20 @@ def main():
combined = pd.concat(dfs, ignore_index=True) combined = pd.concat(dfs, ignore_index=True)
# порядок колонок: сначала из первого удачного файла, потом прочие (кроме служебных) по алфавиту, # Порядок колонок:
# затем служебные SourceFile и SourceFileUrl в конце # 1) как в первом удачном файле,
# 2) затем прочие (кроме служебных) по алфавиту,
# 3) затем служебные SourceFile и SourceFileUrl в конце.
extra_cols = [c for c in combined.columns if c not in all_columns and c not in ('SourceFile', 'SourceFileUrl')] extra_cols = [c for c in combined.columns if c not in all_columns and c not in ('SourceFile', 'SourceFileUrl')]
extra_cols.sort() extra_cols.sort()
final_cols = all_columns + extra_cols final_cols = all_columns + extra_cols
# Гарантируем размещение OZONart сразу после PartNumber, если они есть
if 'OZONart' in final_cols and 'PartNumber' in final_cols:
final_cols.remove('OZONart')
pn_idx = final_cols.index('PartNumber')
final_cols.insert(pn_idx + 1, 'OZONart')
if 'SourceFile' not in final_cols: if 'SourceFile' not in final_cols:
final_cols.append('SourceFile') final_cols.append('SourceFile')
if 'SourceFileUrl' not in final_cols: if 'SourceFileUrl' not in final_cols:

View File

@ -1 +1 @@
"Bambus", "szkło" "Woda", "szkło", "Szkliwo", "kamionka",

View File

@ -1,5 +1,312 @@
https://www.ikea.com/pl/pl/cat/regaly-na-ksiazki-10382/
https://www.ikea.com/pl/pl/cat/kompletne-polki-scienne-20660/
https://www.ikea.com/pl/pl/cat/polki-20658/
https://www.ikea.com/pl/pl/cat/polki-na-obrazy-i-zdjecia-16305/
https://www.ikea.com/pl/pl/cat/nogi-besta-55032/
https://www.ikea.com/pl/pl/cat/galki-i-uchwyty-16298/
https://www.ikea.com/pl/pl/cat/akcesoria-platsa-37898/
https://www.ikea.com/pl/pl/cat/nogi-szyny-akcesoria-eket-59286/
https://www.ikea.com/pl/pl/cat/galki-uchwyty-akcesoria-smastad-49763/
https://www.ikea.com/pl/pl/cat/pudelka-i-pokrywki-trofast-700558/
https://www.ikea.com/pl/pl/cat/dodatkowe-przechowywanie-10797/
https://www.ikea.com/pl/pl/cat/wyspy-kuchenne-wozki-i-barki-10471/
https://www.ikea.com/pl/pl/cat/wozki-lazienkowe-20858/
https://www.ikea.com/pl/pl/cat/pudelka-i-polki-na-zabawki-700560/
https://www.ikea.com/pl/pl/cat/kontenerki-do-domu-47081/
https://www.ikea.com/pl/pl/cat/szafki-i-polki-na-buty-10456/
https://www.ikea.com/pl/pl/product-guides/znajdz-rozwiazanie-do-sortowania-odpadow-dopasowane-do-twoich-potrzeb-pub9194d4a0/
https://www.ikea.com/pl/pl/cat/pudelka-kartonowe-i-ozdobne-16202/
https://www.ikea.com/pl/pl/cat/pudelka-na-buty-i-ubrania-10565/
https://www.ikea.com/pl/pl/cat/pojemniki-i-kosze-na-zabawki-20479/
https://www.ikea.com/pl/pl/cat/kosze-i-koszyki-16201/
https://www.ikea.com/pl/pl/cat/pudelka-i-koszyki-do-lazienki-16233/
https://www.ikea.com/pl/pl/cat/wieszaki-20618/
https://www.ikea.com/pl/pl/cat/organizery-na-ubrania-i-buty-dla-dzieci-20477/
https://www.ikea.com/pl/pl/cat/akcesoria-do-wieszania-ubran-10459/
https://www.ikea.com/pl/pl/cat/pudelka-i-organizery-na-buty-47380/
https://www.ikea.com/pl/pl/cat/kosze-na-pranie-i-bielizne-20601/
https://www.ikea.com/pl/pl/cat/tablice-magnetyczne-korkowe-i-inne-10574/
https://www.ikea.com/pl/pl/cat/segregatory-10567/
https://www.ikea.com/pl/pl/cat/akcesoria-biurowe-10573/
https://www.ikea.com/pl/pl/cat/kosze-do-segregacji-odpadow-34470/
https://www.ikea.com/pl/pl/cat/haki-20617/
https://www.ikea.com/pl/pl/cat/tablice-scienne-i-akcesoria-37900/
https://www.ikea.com/pl/pl/cat/wieszaki-i-polki-dla-dzieci-20481/
https://www.ikea.com/pl/pl/cat/torby-i-wozki-na-zakupy-16295/
https://www.ikea.com/pl/pl/cat/plecaki-i-torby-na-ramie-27821/
https://www.ikea.com/pl/pl/cat/poduszki-podrozne-i-akcesoria-turystyczne-16255/
https://www.ikea.com/pl/pl/cat/organizery-do-toreb-47441/
https://www.ikea.com/pl/pl/cat/torby-chlodzace-46082/
https://www.ikea.com/pl/pl/cat/akcesoria-do-przeprowadzki-46078/
https://www.ikea.com/pl/pl/cat/kosze-lazienkowe-48940/
https://www.ikea.com/pl/pl/cat/polki-i-akcesoria-prysznicowe-10658/
https://www.ikea.com/pl/pl/cat/dozowniki-mydla-i-mydelniczki-10656/
https://www.ikea.com/pl/pl/cat/szczotki-toaletowe-48944/
https://www.ikea.com/pl/pl/cat/uchwyty-na-szczoteczki-do-zebow-48943/
https://www.ikea.com/pl/pl/cat/akcesoria-lazienkowe-bez-wiercenia-700699/
https://www.ikea.com/pl/pl/cat/pojemniki-na-zywnosc-20606/
https://www.ikea.com/pl/pl/cat/zestawy-pojemnikow-na-zywnosc-700586/
https://www.ikea.com/pl/pl/cat/akcesoria-do-przechowywania-zywnosci-i-zamykane-torby-700611/ https://www.ikea.com/pl/pl/cat/akcesoria-do-przechowywania-zywnosci-i-zamykane-torby-700611/
https://www.ikea.com/pl/pl/cat/organizery-do-lodowek-700588/ https://www.ikea.com/pl/pl/cat/organizery-do-lodowek-700588/
https://www.ikea.com/pl/pl/cat/organizery-do-spizarni-i-na-blaty-robocze-700589/ https://www.ikea.com/pl/pl/cat/organizery-do-spizarni-i-na-blaty-robocze-700589/
https://www.ikea.com/pl/pl/cat/sloiki-puszki-i-chlebaki-15950/ https://www.ikea.com/pl/pl/cat/sloiki-puszki-i-chlebaki-15950/
https://www.ikea.com/pl/pl/cat/pojemniki-na-przyprawy-15951/
https://www.ikea.com/pl/pl/cat/kubki-termiczne-i-bidony-700352/
https://www.ikea.com/pl/pl/cat/stojaki-na-wino-i-butelki-15952/
https://www.ikea.com/pl/pl/cat/mix-match-pojemnikow-i-pokrywek-na-zywnosc-700610/
https://www.ikea.com/pl/pl/cat/biurka-do-domu-20651/
https://www.ikea.com/pl/pl/cat/produkty-akustyczne-mittzon-700539/
https://www.ikea.com/pl/pl/cat/kontenerki-i-przechowywanie-trotten-55992/
https://www.ikea.com/pl/pl/cat/akcesoria-trotten-55990/
https://www.ikea.com/pl/pl/cat/nogi-i-kozly-do-stolow-biurek-11845/
https://www.ikea.com/pl/pl/cat/akcesoria-do-relatera-700564/
https://www.ikea.com/pl/pl/cat/podstawki-i-stoliki-pod-laptopa-24830/
https://www.ikea.com/pl/pl/cat/akcesoria-gamingowe-55397/
https://www.ikea.com/pl/pl/cat/lampy-wiszace-i-zyrandole-18751/
https://www.ikea.com/pl/pl/cat/lampy-sufitowe-18752/
https://www.ikea.com/pl/pl/cat/reflektory-sufitowe-18753/
https://www.ikea.com/pl/pl/cat/lampy-stolowe-10732/
https://www.ikea.com/pl/pl/cat/lampy-podlogowe-10731/
https://www.ikea.com/pl/pl/cat/klosze-i-abazury-do-lamp-10804/
https://www.ikea.com/pl/pl/cat/podstawy-i-oprawki-do-lamp-10805/
https://www.ikea.com/pl/pl/cat/lampki-na-biurko-20502/
https://www.ikea.com/pl/pl/cat/reflektory-scienne-20505/
https://www.ikea.com/pl/pl/cat/oswietlenie-szynowe-25209/
https://www.ikea.com/pl/pl/cat/lampy-scienne-i-kinkiety-20504/
https://www.ikea.com/pl/pl/cat/oswietlenie-pokoju-dzieciecego-18773/
https://www.ikea.com/pl/pl/cat/oswietlenie-szafek-lazienkowych-55010/
https://www.ikea.com/pl/pl/cat/oswietlenie-mebli-kuchennych-16282/
https://www.ikea.com/pl/pl/cat/oswietlenie-regalow-16281/
https://www.ikea.com/pl/pl/cat/oswietlenie-sufitowe-do-lazienki-700215/
https://www.ikea.com/pl/pl/cat/oswietlenie-scienne-do-lazienki-700214/
https://www.ikea.com/pl/pl/cat/lampy-stolowe-zewnetrzne-700617/
https://www.ikea.com/pl/pl/cat/lampy-wiszace-zewnetrzne-700618/
https://www.ikea.com/pl/pl/cat/zewnetrzne-lancuchy-swietlne-700619/
https://www.ikea.com/pl/pl/cat/lampiony-i-latarenki-do-zewnatrz-54942/
https://www.ikea.com/pl/pl/cat/dekoracje-swietlne-stolu-700179/
https://www.ikea.com/pl/pl/cat/dekoracyjne-lampy-wiszace-700177/
https://www.ikea.com/pl/pl/cat/swiece-led-39266/
https://www.ikea.com/pl/pl/cat/oswietlenie-dekoracyjne-led-54943/
https://www.ikea.com/pl/pl/cat/podnozki-i-pufy-rattanowe-20929/
https://www.ikea.com/pl/pl/cat/pokrycia-podnozek-i-puf-57654/
https://www.ikea.com/pl/pl/cat/rocksjoen-coverity-700555/
https://www.ikea.com/pl/pl/cat/pokrycia-backsaelen-54993/
https://www.ikea.com/pl/pl/cat/ektorp-10978/
https://www.ikea.com/pl/pl/cat/groenlid-39516/
https://www.ikea.com/pl/pl/cat/holmsund-39519/
https://www.ikea.com/pl/pl/cat/pokrycia-hyltarp-700442/
https://www.ikea.com/pl/pl/cat/pokrycia-jaettebo-700176/
https://www.ikea.com/pl/pl/cat/kivik-18705/
https://www.ikea.com/pl/pl/cat/klippan-10984/
https://www.ikea.com/pl/pl/cat/pokrycia-lillehem-700530/
https://www.ikea.com/pl/pl/cat/poaeng-10996/
https://www.ikea.com/pl/pl/cat/pokrycia-paerup-54994/
https://www.ikea.com/pl/pl/cat/soederhamn-22275/
https://www.ikea.com/pl/pl/cat/vimle-38190/
https://www.ikea.com/pl/pl/cat/vretstorp-49972/
https://www.ikea.com/pl/pl/cat/inne-pokrycia-47990/
https://www.ikea.com/pl/pl/cat/okladki-ekholma-700594/
https://www.ikea.com/pl/pl/cat/poduchy-do-sof-57536/
https://www.ikea.com/pl/pl/cat/nogi-do-sof-i-foteli-31785/
https://www.ikea.com/pl/pl/cat/poszewki-na-poduszki-dekoracyjne-18903/
https://www.ikea.com/pl/pl/cat/poduszki-dekoracyjne-18902/
https://www.ikea.com/pl/pl/cat/poduszki-do-uzytku-na-zewnatrz-46401/
https://www.ikea.com/pl/pl/cat/poduszki-wewnetrzne-18904/
https://www.ikea.com/pl/pl/cat/poduszki-dekoracyjne-i-koce-dla-dzieci-18777/
https://www.ikea.com/pl/pl/cat/pledy-i-koce-20528/
https://www.ikea.com/pl/pl/cat/komplety-poscieli-10680/
https://www.ikea.com/pl/pl/cat/przescieradla-10681/
https://www.ikea.com/pl/pl/cat/posciel-dla-dzieci-18776/
https://www.ikea.com/pl/pl/cat/poszewki-na-poduszki-18890/
https://www.ikea.com/pl/pl/cat/posciel-dla-niemowlat-18692/
https://www.ikea.com/pl/pl/cat/koldry-poliestrowe-20530/
https://www.ikea.com/pl/pl/cat/koldry-z-pierza-i-puchu-20531/
https://www.ikea.com/pl/pl/cat/koldry-obciazeniowe-54991/
https://www.ikea.com/pl/pl/cat/koldry-i-poduszki-dla-niemowlat-18694/
https://www.ikea.com/pl/pl/cat/poduszki-poliestrowe-20534/
https://www.ikea.com/pl/pl/cat/poduszki-z-pierza-i-puchu-20535/
https://www.ikea.com/pl/pl/cat/poduszki-ergonomiczne-46083/
https://www.ikea.com/pl/pl/cat/poduszki-z-pianki-i-pianki-memory-20536/
https://www.ikea.com/pl/pl/cat/poszewki-ochronne-700529/
https://www.ikea.com/pl/pl/cat/narzuty-na-lozko-20527/
https://www.ikea.com/pl/pl/cat/ochraniacze-na-materace-i-poduszki-24824/
https://www.ikea.com/pl/pl/cat/pokrycia-do-lozek-i-zaglowkow-57280/
https://www.ikea.com/pl/pl/cat/duze-reczniki-20523/
https://www.ikea.com/pl/pl/cat/reczniki-do-rak-20525/
https://www.ikea.com/pl/pl/cat/reczniki-kapielowe-20524/
https://www.ikea.com/pl/pl/cat/reczniki-do-twarzy-20521/
https://www.ikea.com/pl/pl/cat/reczniki-i-akcesoria-do-kapieli-niemowlat-18700/
https://www.ikea.com/pl/pl/cat/dywaniki-i-maty-lazienkowe-20519/
https://www.ikea.com/pl/pl/cat/zaslony-prysznicowe-i-drazki-18908/
https://www.ikea.com/pl/pl/cat/akcesoria-do-domowego-spa-700339/
https://www.ikea.com/pl/pl/cat/koldry-i-poduszki-dla-dzieci-31773/
https://www.ikea.com/pl/pl/cat/dywany-do-pokoju-dzieciecego-18774/
https://www.ikea.com/pl/pl/cat/baldachimy-i-akcesoria-do-lozek-dla-dzieci-18775/
https://www.ikea.com/pl/pl/cat/dywany-do-pokoju-niemowlecego-18699/
https://www.ikea.com/pl/pl/cat/kocyki-dla-niemowlat-18695/
https://www.ikea.com/pl/pl/cat/scierki-i-sciereczki-kuchenne-18851/
https://www.ikea.com/pl/pl/cat/fartuchy-kuchenne-18852/
https://www.ikea.com/pl/pl/cat/obrusy-i-biezniki-20541/
https://www.ikea.com/pl/pl/cat/podkladki-i-podstawki-stolowe-20539/
https://www.ikea.com/pl/pl/cat/serwetki-20561/
https://www.ikea.com/pl/pl/cat/poduszki-i-siedziska-na-krzesla-20542/
https://www.ikea.com/pl/pl/cat/poduszki-do-siedzenia-na-zewnatrz-46400/
https://www.ikea.com/pl/pl/cat/duze-i-srednie-dywany-10692/
https://www.ikea.com/pl/pl/cat/chodniki-i-male-dywany-10689/
https://www.ikea.com/pl/pl/cat/dywany-wykonane-recznie-39267/
https://www.ikea.com/pl/pl/cat/dywany-na-balkon-i-taras-34204/
https://www.ikea.com/pl/pl/cat/wycieraczki-pod-drzwi-10698/
https://www.ikea.com/pl/pl/cat/skory-owcze-i-krowie-20544/
https://www.ikea.com/pl/pl/cat/maty-antyposlizgowe-pod-dywan-10699/
https://www.ikea.com/pl/pl/cat/dywany-okragle-20543/
https://www.ikea.com/pl/pl/cat/odziez-i-akcesoria-42925/
https://www.ikea.com/pl/pl/cat/tkaniny-14349/
https://www.ikea.com/pl/pl/cat/podparcie-odcinka-ledzwiowego-700528/
https://www.ikea.com/pl/pl/rooms/bedroom/znajdz-koldry-idealne-dla-siebie-pubff1f62ba/
https://www.ikea.com/pl/pl/cat/maty-na-materac-24826/
https://www.ikea.com/pl/pl/cat/materace-do-lozeczek-dla-niemowlat-45855/
https://www.ikea.com/pl/pl/cat/pojemniki-pod-lozko-19059/
https://www.ikea.com/pl/pl/cat/nogi-do-lozek-24822/
https://www.ikea.com/pl/pl/cat/zaslony-zaciemniajace-700218/
https://www.ikea.com/pl/pl/cat/zaslony-zacieniajace-700219/
https://www.ikea.com/pl/pl/cat/zaslony-polprzezroczyste-700220/
https://www.ikea.com/pl/pl/cat/firanki-700221/
https://www.ikea.com/pl/pl/cat/rolety-zaciemniajace-700222/
https://www.ikea.com/pl/pl/cat/rolety-plisowane-700225/
https://www.ikea.com/pl/pl/cat/rolety-rzymskie-700224/
https://www.ikea.com/pl/pl/cat/rolety-bezsznurkowe-700223/
https://www.ikea.com/pl/pl/cat/rolety-elektryczne-44531/
https://www.ikea.com/pl/pl/cat/zaluzje-weneckie-700599/
https://www.ikea.com/pl/pl/cat/folie-okienne-i-akcesoria-700628/
https://www.ikea.com/pl/pl/cat/karnisze-i-zabki-18892/
https://www.ikea.com/pl/pl/cat/system-karniszy-szynowych-18893/
https://www.ikea.com/pl/pl/cat/krzeselka-do-karmienia-45782/
https://www.ikea.com/pl/pl/cat/akcesoria-do-przewijania-45925/
https://www.ikea.com/pl/pl/cat/nocniki-i-wanienki-dla-niemowlat-45924/
https://www.ikea.com/pl/pl/cat/sliniaki-i-naczynia-dla-niemowlat-31772/
https://www.ikea.com/pl/pl/cat/miekkie-zabawki-dla-niemowlat-700632/
https://www.ikea.com/pl/pl/cat/aktywne-zabawki-dla-niemowlat-700633/
https://www.ikea.com/pl/pl/cat/bezpieczenstwo-dzieci-16257/
https://www.ikea.com/pl/pl/cat/krzeselka-dla-dzieci-18769/
https://www.ikea.com/pl/pl/cat/stoliki-dla-dzieci-18768/
https://www.ikea.com/pl/pl/cat/meble-ogrodowe-dla-dzieci-37899/
https://www.ikea.com/pl/pl/cat/stolki-i-lawki-dla-dzieci-45816/
https://www.ikea.com/pl/pl/cat/krzesla-wysokie-dla-dzieci-45815/
https://www.ikea.com/pl/pl/cat/dekoracje-i-akcesoria-dla-dzieci-24711/
https://www.ikea.com/pl/pl/cat/przybory-do-malowania-i-rekodziela-18735/
https://www.ikea.com/pl/pl/cat/pluszaki-i-maskotki-18740/
https://www.ikea.com/pl/pl/cat/zabawki-do-odgrywania-rol-18737/
https://www.ikea.com/pl/pl/cat/zabawki-i-gry-ruchowe-18736/
https://www.ikea.com/pl/pl/cat/zabawki-drewniane-18738/
https://www.ikea.com/pl/pl/cat/namioty-dla-dzieci-20484/
https://www.ikea.com/pl/pl/cat/gry-planszowe-i-karciane-42921/
https://www.ikea.com/pl/pl/cat/naczynia-kuchenne-i-stolowe-dla-dzieci-18714/
https://www.ikea.com/pl/pl/cat/komplety-naczyn-obiadowych-31781/
https://www.ikea.com/pl/pl/cat/patelnie-20630/
https://www.ikea.com/pl/pl/cat/woki-20631/
https://www.ikea.com/pl/pl/cat/patelnie-grillowe-22664/
https://www.ikea.com/pl/pl/cat/rondle-do-smazenia-saute-22665/
https://www.ikea.com/pl/pl/cat/garnki-20634/
https://www.ikea.com/pl/pl/cat/zestawy-garnkow-31774/
https://www.ikea.com/pl/pl/cat/rondle-20635/
https://www.ikea.com/pl/pl/cat/szybkowary-22669/
https://www.ikea.com/pl/pl/cat/naczynia-zaroodporne-15928/
https://www.ikea.com/pl/pl/cat/wklady-do-gotowania-pokrywki-i-podstawki-pod-garnki-15927/
https://www.ikea.com/pl/pl/cat/akcesoria-do-gotowania-33499/
https://www.ikea.com/pl/pl/cat/miarki-kuchenne-15949/
https://www.ikea.com/pl/pl/cat/miski-do-mieszania-20669/
https://www.ikea.com/pl/pl/cat/chochle-trzepaczki-i-lyzki-kuchenne-33498/
https://www.ikea.com/pl/pl/cat/durszlaki-i-sitka-20667/
https://www.ikea.com/pl/pl/cat/akcesoria-do-lodow-i-kostek-lodu-33500/
https://www.ikea.com/pl/pl/cat/przybory-do-pieczenia-20645/
https://www.ikea.com/pl/pl/cat/slomki-korkociagi-i-inne-akcesoria-18872/
https://www.ikea.com/pl/pl/cat/akcesoria-do-kawy-20622/
https://www.ikea.com/pl/pl/cat/akcesoria-do-herbaty-20621/
https://www.ikea.com/pl/pl/cat/tace-16048/
https://www.ikea.com/pl/pl/cat/miski-20619/
https://www.ikea.com/pl/pl/cat/patery-i-tace-do-serwowania-potraw-59251/
https://www.ikea.com/pl/pl/cat/sztucce-do-serwowania-potraw-18867/
https://www.ikea.com/pl/pl/cat/suszarki-i-ociekacze-do-naczyn-700196/
https://www.ikea.com/pl/pl/cat/akcesoria-do-zlewozmywakow-24262/
https://www.ikea.com/pl/pl/cat/komplety-sztuccow-18866/
https://www.ikea.com/pl/pl/cat/deski-do-krojenia-15947/
https://www.ikea.com/pl/pl/cat/ostrzalki-do-nozy-18849/
https://www.ikea.com/pl/pl/cat/formy-i-blachy-do-pieczenia-20643/
https://www.ikea.com/pl/pl/cat/serwetniki-20562/
https://www.ikea.com/pl/pl/cat/akcesoria-piknikowe-700353/
https://www.ikea.com/pl/pl/cat/krzesla-skladane-25222/
https://www.ikea.com/pl/pl/cat/ramki-na-zdjecia-i-obrazy-18746/
https://www.ikea.com/pl/pl/cat/obrazy-10788/
https://www.ikea.com/pl/pl/cat/plakaty-10787/
https://www.ikea.com/pl/pl/cat/multiramki-na-zdjecia-10789/
https://www.ikea.com/pl/pl/cat/akcenty-scienne-700425/
https://www.ikea.com/pl/pl/cat/swiece-zapachowe-10783/
https://www.ikea.com/pl/pl/cat/swiece-bezzapachowe-10782/
https://www.ikea.com/pl/pl/cat/swieczniki-i-podstawki-pod-swiece-10784/
https://www.ikea.com/pl/pl/cat/akcesoria-do-swiec-16307/
https://www.ikea.com/pl/pl/cat/miski-i-polmiski-16308/
https://www.ikea.com/pl/pl/cat/doniczki-do-wewnatrz-10778/
https://www.ikea.com/pl/pl/cat/doniczki-na-zewnatrz-30436/
https://www.ikea.com/pl/pl/cat/doniczki-wiszace-59240/
https://www.ikea.com/pl/pl/cat/stojaki-i-wozki-na-doniczki-20494/
https://www.ikea.com/pl/pl/cat/konewki-20493/
https://www.ikea.com/pl/pl/cat/doniczki-samonawadniajace-20495/
https://www.ikea.com/pl/pl/cat/akcesoria-i-narzedzia-ogrodnicze-24887/
https://www.ikea.com/pl/pl/cat/figurki-i-ozdoby-dekoracyjne-24924/
https://www.ikea.com/pl/pl/cat/potpourri-58412/
https://www.ikea.com/pl/pl/cat/saszetki-zapachowe-do-szaf-i-regalow-58411/
https://www.ikea.com/pl/pl/cat/swiece-i-swieczniki-swiateczne-49157/
https://www.ikea.com/pl/pl/cat/dekoracje-swiateczne-stolu-49156/
https://www.ikea.com/pl/pl/cat/metod-organizery-i-akcesoria-wewnetrzne-49118/
https://www.ikea.com/pl/pl/cat/zmywarki-do-kuchni-metod-50387/
https://www.ikea.com/pl/pl/cat/pralki-do-metod-50390/
https://www.ikea.com/pl/pl/cat/zlewy-i-zlewozmywaki-24263/
https://www.ikea.com/pl/pl/cat/baterie-kuchenne-10482/
https://www.ikea.com/pl/pl/cat/czesci-do-zlewozmywakow-53253/
https://www.ikea.com/pl/pl/cat/zlewy-i-baterie-do-knoxhult-48979/
https://www.ikea.com/pl/pl/cat/panele-scienne-do-knoxhult-48983/
https://www.ikea.com/pl/pl/cat/zmywarki-do-kuchni-enhet-50378/
https://www.ikea.com/pl/pl/cat/szafki-kuchenne-enhet-48993/
https://www.ikea.com/pl/pl/cat/organizery-enhet-49015/
https://www.ikea.com/pl/pl/cat/zlewy-i-krany-do-enhet-50011/
https://www.ikea.com/pl/pl/cat/kombinacje-do-przechowywania-enhet-55006/
https://www.ikea.com/pl/pl/cat/organizery-do-szuflad-kuchennych-24257/
https://www.ikea.com/pl/pl/cat/tace-na-sztucce-do-szuflad-40cm-700172/
https://www.ikea.com/pl/pl/cat/tace-na-sztucce-do-szuflad-60cm-700173/
https://www.ikea.com/pl/pl/cat/tace-na-sztucce-do-szuflad-80cm-700174/
https://www.ikea.com/pl/pl/cat/kosze-do-szafek-kuchennych-24259/
https://www.ikea.com/pl/pl/cat/akcesoria-na-srodki-czystosci-24256/
https://www.ikea.com/pl/pl/cat/scienne-organizery-kuchenne-20677/
https://www.ikea.com/pl/pl/cat/polki-kuchenne-20678/
https://www.ikea.com/pl/pl/cat/baterie-do-sunnersta-48989/
https://www.ikea.com/pl/pl/cat/akcesoria-do-sunnersta-48987/
https://www.ikea.com/pl/pl/cat/zlewozmywaki-i-baterie-do-aespinge-700402/
https://www.ikea.com/pl/pl/cat/akcesoria-do-aespinge-700401/
https://www.ikea.com/pl/pl/cat/zlewozmywaki-i-baterie-do-oennerup-700536/
https://www.ikea.com/pl/pl/cat/akcesoria-do-oennerup-700537/
https://www.ikea.com/pl/pl/cat/akcesoria-i-osprzet-700674/
https://www.ikea.com/pl/pl/cat/zawiasy-i-amortyzatory-24260/
https://www.ikea.com/pl/pl/cat/baterie-umywalkowe-20724/
https://www.ikea.com/pl/pl/cat/blaty-lazienkowe-30565/
https://www.ikea.com/pl/pl/cat/zestawy-prysznicowe-i-drazki-40693/
https://www.ikea.com/pl/pl/cat/sluchawki-prysznicowe-40692/
https://www.ikea.com/pl/pl/cat/baterie-prysznicowe-40691/
https://www.ikea.com/pl/pl/cat/akcesoria-do-prania-55004/
https://www.ikea.com/pl/pl/cat/deski-do-prasowania-20608/
https://www.ikea.com/pl/pl/cat/taborety-i-lawy-lazienkowe-20859/
https://www.ikea.com/pl/pl/cat/kosze-na-makulature-16215/
https://www.ikea.com/pl/pl/cat/worki-i-torby-16214/
https://www.ikea.com/pl/pl/cat/akcesoria-do-sprzatania-20609/
https://www.ikea.com/pl/pl/cat/podlogi-na-balkon-i-taras-21957/
https://www.ikea.com/pl/pl/cat/produkty-dla-psow-39570/
https://www.ikea.com/pl/pl/cat/produkty-dla-kotow-39569/
https://www.ikea.com/pl/pl/cat/pokrowce-na-meble-ogrodowe-i-grille-34205/
https://www.ikea.com/pl/pl/cat/parasole-ogrodowe-i-podstawy-17894/
https://www.ikea.com/pl/pl/cat/altany-ogrodowe-i-moskitiery-24331/
https://www.ikea.com/pl/pl/cat/parawany-i-oslony-balkonowe-17895/
https://www.ikea.com/pl/pl/cat/zestawy-kuchenne-na-zewnatrz-55998/
https://www.ikea.com/pl/pl/cat/meble-i-czesci-kuchenne-na-swiezym-powietrzu-700544/
https://www.ikea.com/pl/pl/cat/donice-i-wazony-swiateczne-49160/
https://www.ikea.com/pl/pl/cat/tekstylia-swiateczne-49152/
https://www.ikea.com/pl/pl/cat/gotowanie-i-pieczenie-swiateczne-49154/
https://www.ikea.com/pl/pl/cat/zastawa-stolowa-swiateczna-49153/

File diff suppressed because one or more lines are too long

View File

@ -98,6 +98,7 @@ KEEP_COLUMNS = [
"productInformationSection.productDetailsProps", "productInformationSection.productDetailsProps",
"productInformationSection.productDetailsProps_formatted", "productInformationSection.productDetailsProps_formatted",
"productInformationSection.productDetailsProps_formatted_html", "productInformationSection.productDetailsProps_formatted_html",
"productInformationSection.dimensionsOnly_formatted_html_translated",
"productSummary.description", "productSummary.description",
"productSummary.visibleItemNo", "productSummary.visibleItemNo",
"stockcheckSection.packagingProps", "stockcheckSection.packagingProps",
@ -256,7 +257,7 @@ def format_dimensions(raw_dim_props, with_html=False, translated=False):
br = "<br/>" if with_html else "\n" br = "<br/>" if with_html else "\n"
title = translate_token("Wymiary") if translated else "Wymiary" title = translate_token("Wymiary") if translated else "Wymiary"
lines.append(f"<strong>{title}</strong>" if with_html else title) lines.append(f"<b>{title}</b>" if with_html else title)
for d in raw_dim_props.get("dimensions", []): for d in raw_dim_props.get("dimensions", []):
name = d.get("name", "") name = d.get("name", "")
@ -273,7 +274,7 @@ def format_dimensions(raw_dim_props, with_html=False, translated=False):
pack = (raw_dim_props.get("packaging") or {}) pack = (raw_dim_props.get("packaging") or {})
pack_title = translate_token("Opakowanie") if translated else "Opakowanie" pack_title = translate_token("Opakowanie") if translated else "Opakowanie"
lines.append(br if with_html else "") lines.append(br if with_html else "")
lines.append(f"<strong>{pack_title}</strong>" if with_html else pack_title) lines.append(f"<b>{pack_title}</b>" if with_html else pack_title)
content = (pack.get("contentProps") or {}).get("packages") or [] content = (pack.get("contentProps") or {}).get("packages") or []
for pkg in content: for pkg in content:
@ -312,7 +313,7 @@ def format_dimensions(raw_dim_props, with_html=False, translated=False):
s = br.join([x for x in lines if x is not None]) s = br.join([x for x in lines if x is not None])
s = re.sub(r"(" + re.escape(br) + r"){2,}", br*2, s) s = re.sub(r"(" + re.escape(br) + r"){2,}", br*2, s)
s = s.strip(br) s = s.strip(br)
if s.startswith("strong>"): if s.startswith("b>"):
s = "<" + s s = "<" + s
return s return s
return "\n".join([x for x in lines if x is not None]).strip() return "\n".join([x for x in lines if x is not None]).strip()
@ -329,7 +330,7 @@ def format_product_details(raw_details, add_summary_desc="", with_html=False, sk
out.append(br if with_html else "") out.append(br if with_html else "")
t1 = "Informacje o produkcie" t1 = "Informacje o produkcie"
out.append(f"<strong>{t1}</strong>" if with_html else t1) out.append(f"<b>{t1}</b>" if with_html else t1)
pd = (raw_details.get("productDescriptionProps") or {}) pd = (raw_details.get("productDescriptionProps") or {})
paragraphs = pd.get("paragraphs") or [] paragraphs = pd.get("paragraphs") or []
for p in paragraphs: for p in paragraphs:
@ -350,7 +351,7 @@ def format_product_details(raw_details, add_summary_desc="", with_html=False, sk
if gk: if gk:
out.append(br if with_html else "") out.append(br if with_html else "")
t2 = "Dobrze wiedzieć" t2 = "Dobrze wiedzieć"
out.append(f"<strong>{t2}</strong>" if with_html else t2) out.append(f"<b>{t2}</b>" if with_html else t2)
for item in gk: for item in gk:
txt = item.get("text") txt = item.get("text")
if txt: if txt:
@ -363,7 +364,7 @@ def format_product_details(raw_details, add_summary_desc="", with_html=False, sk
t3 = "Materiały i pielęgnacja" t3 = "Materiały i pielęgnacja"
if mats or care: if mats or care:
out.append(br if with_html else "") out.append(br if with_html else "")
out.append(f"<strong>{t3}</strong>" if with_html else t3) out.append(f"<b>{t3}</b>" if with_html else t3)
if mats: if mats:
out.append("Materiały") out.append("Materiały")
@ -392,7 +393,7 @@ def format_product_details(raw_details, add_summary_desc="", with_html=False, sk
if sc: if sc:
out.append(br if with_html else "") out.append(br if with_html else "")
t4 = "Bezpieczeństwo i zgodność с przepisami" t4 = "Bezpieczeństwo i zgodność с przepisami"
out.append(f"<strong>{t4}</strong>" if with_html else t4) out.append(f"<b>{t4}</b>" if with_html else t4)
for s in sc: for s in sc:
txt = s.get("text") txt = s.get("text")
if txt: if txt:
@ -419,6 +420,41 @@ def build_variant_color_measure(desc: str, type_name: str, measurement: str) ->
s = s[:1].upper() + s[1:] s = s[:1].upper() + s[1:]
return f"{s}, {meas}" if meas else s return f"{s}, {meas}" if meas else s
def format_dimensions_only(raw_dim_props, with_html=False, translated=False):
"""
Возвращает ТОЛЬКО секцию размеров (Wymiary) без упаковки.
Форматирование такое же, как в остальных форматтерах: <b></b> и <br/>.
"""
if not isinstance(raw_dim_props, dict):
return ""
lines = []
br = "<br/>" if with_html else "\n"
title = translate_token("Wymiary") if translated else "Wymiary"
lines.append(f"<b>{title}</b>" if with_html else title)
for d in raw_dim_props.get("dimensions", []):
name = d.get("name", "")
meas = d.get("measure", "")
if not name and not meas:
continue
if translated:
name_t = translate_token(name)
line = f"{name_t}: {meas}".strip()
else:
line = f"{name}: {meas}".strip()
lines.append(line)
if with_html:
s = br.join([x for x in lines if x is not None])
s = re.sub(r"(" + re.escape(br) + r"){2,}", br*2, s)
s = s.strip(br)
# страховка для Excel-предпросмотра
if s.startswith("b>"):
s = "<" + s
return s
return "\n".join([x for x in lines if x is not None]).strip()
# ───────────────────── СКРАПИНГ КАРТОЧКИ ────────────────────────── # ───────────────────── СКРАПИНГ КАРТОЧКИ ──────────────────────────
def extract_data(url: str) -> dict: def extract_data(url: str) -> dict:
""" """
@ -456,9 +492,15 @@ def extract_data(url: str) -> dict:
det_json = _parse_json_value(result.get("productInformationSection.productDetailsProps")) det_json = _parse_json_value(result.get("productInformationSection.productDetailsProps"))
result["keyFacts.keyFacts_formatted"] = format_keyfacts(kf_json) result["keyFacts.keyFacts_formatted"] = format_keyfacts(kf_json)
result["productInformationSection.dimensionProps_formatted"] = format_dimensions(dim_json, with_html=False, translated=False) result["productInformationSection.dimensionProps_formatted"] = format_dimensions(dim_json, with_html=True, translated=True)
# Новая колонка: только размеры (без упаковки), в HTML
dims_only_html = format_dimensions_only(dim_json, with_html=True, translated=True)
#if isinstance(dims_only_html, str) and dims_only_html.startswith("b>"):
# dims_only_html = "<" + dims_only_html
result["productInformationSection.dimensionsOnly_formatted_html_translated"] = dims_only_html
html_trans = format_dimensions(dim_json, with_html=True, translated=True) html_trans = format_dimensions(dim_json, with_html=True, translated=True)
if isinstance(html_trans, str) and html_trans.startswith("strong>"): if isinstance(html_trans, str) and html_trans.startswith("b>"):
html_trans = "<" + html_trans html_trans = "<" + html_trans
result["productInformationSection.dimensionProps_formatted_html_translated"] = html_trans result["productInformationSection.dimensionProps_formatted_html_translated"] = html_trans
@ -536,7 +578,7 @@ def build_variant(row: dict) -> dict:
url = row.get("url") or "" url = row.get("url") or ""
name = row.get("originalName") or row.get("buyModule.productName") or "" name = row.get("originalName") or row.get("buyModule.productName") or ""
desc_html = row.get("productInformationSection.productDetailsProps_formatted_html") or "" desc_html = row.get("productInformationSection.productDetailsProps_formatted_html") or ""
composition_html = row.get("productInformationSection.dimensionProps_formatted_html_translated") or "" composition_html = row.get("productInformationSection.dimensionsOnly_formatted_html_translated") or ""
imgs = [] imgs = []
raw_imgs = row.get("productGallery.urls") or "" raw_imgs = row.get("productGallery.urls") or ""

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More