scrapegraphai 2.2.1__tar.gz → 2.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/.github/workflows/test-suite.yml +1 -0
  2. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/CHANGELOG.md +7 -0
  3. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/PKG-INFO +1 -1
  4. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/pyproject.toml +1 -1
  5. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/docloaders/chromium.py +32 -3
  6. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/code_generator_graph.py +5 -1
  7. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/document_scraper_graph.py +1 -0
  8. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/omni_scraper_graph.py +1 -0
  9. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/script_creator_graph.py +1 -0
  10. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/smart_scraper_graph.py +6 -1
  11. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/smart_scraper_lite_graph.py +5 -1
  12. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/smart_scraper_multi_batch_graph.py +2 -3
  13. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/speech_graph.py +5 -1
  14. scrapegraphai-2.2.2/scrapegraphai/nodes/parse_node.py +473 -0
  15. scrapegraphai-2.2.2/tests/test_error_page_detection.py +326 -0
  16. scrapegraphai-2.2.1/scrapegraphai/nodes/parse_node.py +0 -219
  17. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/.gitattributes +0 -0
  18. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/.github/FUNDING.yml +0 -0
  19. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  20. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/.github/ISSUE_TEMPLATE/custom.md +0 -0
  21. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  22. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/.github/workflows/codeql.yml +0 -0
  23. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/.github/workflows/dependency-review.yml +0 -0
  24. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/.github/workflows/release.yml +0 -0
  25. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/.gitignore +0 -0
  26. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/.pre-commit-config.yaml +0 -0
  27. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/.releaserc.yml +0 -0
  28. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/.semantic-commits-applied +0 -0
  29. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/AGENTS.md +0 -0
  30. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/CODE_OF_CONDUCT.md +0 -0
  31. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/CONTRIBUTING.md +0 -0
  32. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/Dockerfile +0 -0
  33. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/LICENSE +0 -0
  34. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/Makefile +0 -0
  35. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/PullRequests/PR_1027_reviews.md +0 -0
  36. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/README.md +0 -0
  37. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/SECURITY.md +0 -0
  38. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/SEMANTIC_COMMITS.md +0 -0
  39. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/TESTING_INFRASTRUCTURE.md +0 -0
  40. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/citation.cff +0 -0
  41. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/codebeaver.yml +0 -0
  42. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docker-compose.yml +0 -0
  43. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/api-banner.png +0 -0
  44. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/api_banner.png +0 -0
  45. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/apikey_1.png +0 -0
  46. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/apikey_2.png +0 -0
  47. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/apikey_3.png +0 -0
  48. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/apikey_4.png +0 -0
  49. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/browserbase_logo.png +0 -0
  50. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/codespaces-badge.png +0 -0
  51. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/histogram.png +0 -0
  52. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/nodemaven-banner.png +0 -0
  53. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/omniscrapergraph.png +0 -0
  54. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/omnisearchgraph.png +0 -0
  55. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/project_overview_diagram.fig +0 -0
  56. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/project_overview_diagram.png +0 -0
  57. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/scrapegraphai_logo.png +0 -0
  58. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/scrapegraphai_logo.svg +0 -0
  59. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/scriptcreatorgraph.png +0 -0
  60. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/searchgraph.png +0 -0
  61. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/sgai-hero.png +0 -0
  62. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/smartscrapergraph.png +0 -0
  63. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/assets/speechgraph.png +0 -0
  64. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/chinese.md +0 -0
  65. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/french.md +0 -0
  66. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/german.md +0 -0
  67. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/italian.md +0 -0
  68. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/japanese.md +0 -0
  69. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/korean.md +0 -0
  70. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/portuguese.md +0 -0
  71. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/russian.md +0 -0
  72. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/spanish.md +0 -0
  73. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/timeout_configuration.md +0 -0
  74. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/docs/turkish.md +0 -0
  75. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/ScrapegraphAI_cookbook.ipynb +0 -0
  76. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/code_generator_graph/.env.example +0 -0
  77. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/code_generator_graph/README.md +0 -0
  78. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/code_generator_graph/ollama/code_generator_graph_ollama.py +0 -0
  79. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/code_generator_graph/openai/code_generator_graph_openai.py +0 -0
  80. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/csv_scraper_graph/.env.example +0 -0
  81. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/csv_scraper_graph/README.md +0 -0
  82. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/csv_scraper_graph/ollama/csv_scraper_graph_multi_ollama.py +0 -0
  83. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/csv_scraper_graph/ollama/csv_scraper_ollama.py +0 -0
  84. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/csv_scraper_graph/ollama/inputs/username.csv +0 -0
  85. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/csv_scraper_graph/openai/csv_scraper_graph_multi_openai.py +0 -0
  86. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/csv_scraper_graph/openai/csv_scraper_openai.py +0 -0
  87. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/csv_scraper_graph/openai/inputs/username.csv +0 -0
  88. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/custom_graph/.env.example +0 -0
  89. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/custom_graph/README.md +0 -0
  90. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/custom_graph/ollama/custom_graph_ollama.py +0 -0
  91. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/custom_graph/openai/custom_graph_openai.py +0 -0
  92. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/depth_search_graph/.env.example +0 -0
  93. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/depth_search_graph/README.md +0 -0
  94. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/depth_search_graph/ollama/depth_search_graph_ollama.py +0 -0
  95. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/depth_search_graph/openai/depth_search_graph_openai.py +0 -0
  96. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/document_scraper_graph/.env.example +0 -0
  97. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/document_scraper_graph/README.md +0 -0
  98. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/document_scraper_graph/ollama/document_scraper_ollama.py +0 -0
  99. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/document_scraper_graph/ollama/inputs/plain_html_example.txt +0 -0
  100. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/document_scraper_graph/openai/document_scraper_openai.py +0 -0
  101. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/document_scraper_graph/openai/inputs/markdown_example.md +0 -0
  102. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/document_scraper_graph/openai/inputs/plain_html_example.txt +0 -0
  103. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/.env.example +0 -0
  104. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/Savedscreenshots/test_image.jpeg +0 -0
  105. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/authenticated_playwright.py +0 -0
  106. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/browser_base_integration.py +0 -0
  107. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/chromium_selenium.py +0 -0
  108. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/cond_smartscraper_usage.py +0 -0
  109. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/conditional_usage.py +0 -0
  110. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/custom_prompt.py +0 -0
  111. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/example.yml +0 -0
  112. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/force_mode.py +0 -0
  113. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/html_mode.py +0 -0
  114. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/load_yml.py +0 -0
  115. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/no_cut.py +0 -0
  116. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/proxy_rotation.py +0 -0
  117. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/rag_caching.py +0 -0
  118. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/reasoning.py +0 -0
  119. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/scrape_do.py +0 -0
  120. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/screenshot_scaping.py +0 -0
  121. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/serch_graph_scehma.py +0 -0
  122. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/slow_mo.py +0 -0
  123. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/extras/undected_playwright.py +0 -0
  124. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/json_scraper_graph/.env.example +0 -0
  125. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/json_scraper_graph/README.md +0 -0
  126. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/json_scraper_graph/ollama/inputs/example.json +0 -0
  127. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/json_scraper_graph/ollama/json_scraper_multi_ollama.py +0 -0
  128. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/json_scraper_graph/ollama/json_scraper_ollama.py +0 -0
  129. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/json_scraper_graph/openai/inputs/example.json +0 -0
  130. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/json_scraper_graph/openai/json_scraper_multi_openai.py +0 -0
  131. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/json_scraper_graph/openai/json_scraper_openai.py +0 -0
  132. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/json_scraper_graph/openai/md_scraper_openai.py +0 -0
  133. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/json_scraper_graph/openai/omni_scraper_openai.py +0 -0
  134. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/markdownify/.env.example +0 -0
  135. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/markdownify/markdownify_scrapegraphai.py +0 -0
  136. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/markdownify/markdownify_scrapegraphai_v3.py +0 -0
  137. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/markdownify/readme.md +0 -0
  138. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/omni_scraper_graph/.env.example +0 -0
  139. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/omni_scraper_graph/README.md +0 -0
  140. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/omni_scraper_graph/omni_search_openai.py +0 -0
  141. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/readme.md +0 -0
  142. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/script_generator_graph/.env.example +0 -0
  143. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/script_generator_graph/README.md +0 -0
  144. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/script_generator_graph/ollama/script_generator_ollama.py +0 -0
  145. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/script_generator_graph/ollama/script_multi_generator_ollama.py +0 -0
  146. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/script_generator_graph/openai/script_generator_multi_openai.py +0 -0
  147. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/script_generator_graph/openai/script_generator_openai.py +0 -0
  148. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/script_generator_graph/openai/script_generator_schema_openai.py +0 -0
  149. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/search_graph/.env.example +0 -0
  150. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/search_graph/README.md +0 -0
  151. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/search_graph/ollama/search_graph_ollama.py +0 -0
  152. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/search_graph/ollama/search_graph_schema_ollama.py +0 -0
  153. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/search_graph/openai/search_graph_openai.py +0 -0
  154. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/search_graph/openai/search_graph_schema_openai.py +0 -0
  155. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/search_graph/openai/search_link_graph_openai.py +0 -0
  156. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/search_graph/scrapegraphai/.env.example +0 -0
  157. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/search_graph/scrapegraphai/readme.md +0 -0
  158. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/search_graph/scrapegraphai/searchscraper_scrapegraphai.py +0 -0
  159. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/search_graph/scrapegraphai/searchscraper_scrapegraphai_v3.py +0 -0
  160. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/.env.example +0 -0
  161. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/nvidia/smart_scraper_nvidia.py +0 -0
  162. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/ollama/smart_scraper_lite_ollama.py +0 -0
  163. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/ollama/smart_scraper_multi_concat_ollama.py +0 -0
  164. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/ollama/smart_scraper_multi_lite_ollama.py +0 -0
  165. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/ollama/smart_scraper_multi_ollama.py +0 -0
  166. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/ollama/smart_scraper_ollama.py +0 -0
  167. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/ollama/smart_scraper_schema_ollama.py +0 -0
  168. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/openai/smart_scraper_lite_openai.py +0 -0
  169. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/openai/smart_scraper_multi_concat_openai.py +0 -0
  170. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/openai/smart_scraper_multi_lite_openai.py +0 -0
  171. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/openai/smart_scraper_multi_openai.py +0 -0
  172. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/openai/smart_scraper_openai.py +0 -0
  173. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/openai/smart_scraper_schema_openai.py +0 -0
  174. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/scrapegraphai/.env.example +0 -0
  175. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/scrapegraphai/readme.md +0 -0
  176. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/scrapegraphai/smartscraper_scrapegraphai.py +0 -0
  177. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/smart_scraper_graph/scrapegraphai/smartscraper_scrapegraphai_v3.py +0 -0
  178. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/speech_graph/.env.example +0 -0
  179. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/speech_graph/README.md +0 -0
  180. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/speech_graph/speech_graph_openai.py +0 -0
  181. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/xml_scraper_graph/.env.example +0 -0
  182. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/xml_scraper_graph/README.md +0 -0
  183. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/xml_scraper_graph/ollama/inputs/books.xml +0 -0
  184. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/xml_scraper_graph/ollama/xml_scraper_graph_multi_ollama.py +0 -0
  185. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/xml_scraper_graph/ollama/xml_scraper_ollama.py +0 -0
  186. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/xml_scraper_graph/openai/inputs/books.xml +0 -0
  187. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/xml_scraper_graph/openai/xml_scraper_graph_multi_openai.py +0 -0
  188. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/examples/xml_scraper_graph/openai/xml_scraper_openai.py +0 -0
  189. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/media/banner.png +0 -0
  190. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/pytest.ini +0 -0
  191. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/__init__.py +0 -0
  192. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/builders/__init__.py +0 -0
  193. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/builders/graph_builder.py +0 -0
  194. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/docloaders/__init__.py +0 -0
  195. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/docloaders/browser_base.py +0 -0
  196. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/docloaders/plasmate.py +0 -0
  197. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/docloaders/scrape_do.py +0 -0
  198. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/__init__.py +0 -0
  199. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/abstract_graph.py +0 -0
  200. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/base_graph.py +0 -0
  201. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/csv_scraper_graph.py +0 -0
  202. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/csv_scraper_multi_graph.py +0 -0
  203. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/depth_search_graph.py +0 -0
  204. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/document_scraper_multi_graph.py +0 -0
  205. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/json_scraper_graph.py +0 -0
  206. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/json_scraper_multi_graph.py +0 -0
  207. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/markdownify_graph.py +0 -0
  208. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/omni_search_graph.py +0 -0
  209. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/screenshot_scraper_graph.py +0 -0
  210. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/script_creator_multi_graph.py +0 -0
  211. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/search_graph.py +0 -0
  212. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/search_link_graph.py +0 -0
  213. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/smart_scraper_multi_concat_graph.py +0 -0
  214. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/smart_scraper_multi_graph.py +0 -0
  215. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/smart_scraper_multi_lite_graph.py +0 -0
  216. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/xml_scraper_graph.py +0 -0
  217. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/graphs/xml_scraper_multi_graph.py +0 -0
  218. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/helpers/__init__.py +0 -0
  219. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/helpers/default_filters.py +0 -0
  220. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/helpers/models_tokens.py +0 -0
  221. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/helpers/nodes_metadata.py +0 -0
  222. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/helpers/robots.py +0 -0
  223. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/helpers/schemas.py +0 -0
  224. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/integrations/__init__.py +0 -0
  225. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/integrations/burr_bridge.py +0 -0
  226. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/integrations/indexify_node.py +0 -0
  227. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/integrations/scrapegraph_py_compat.py +0 -0
  228. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/models/__init__.py +0 -0
  229. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/models/atlascloud.py +0 -0
  230. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/models/clod.py +0 -0
  231. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/models/deepseek.py +0 -0
  232. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/models/minimax.py +0 -0
  233. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/models/nvidia.py +0 -0
  234. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/models/oneapi.py +0 -0
  235. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/models/openai_itt.py +0 -0
  236. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/models/openai_tts.py +0 -0
  237. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/models/xai.py +0 -0
  238. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/__init__.py +0 -0
  239. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/base_node.py +0 -0
  240. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/batch_generate_answer_node.py +0 -0
  241. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/concat_answers_node.py +0 -0
  242. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/conditional_node.py +0 -0
  243. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/description_node.py +0 -0
  244. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/fetch_node.py +0 -0
  245. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/fetch_node_level_k.py +0 -0
  246. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/fetch_screen_node.py +0 -0
  247. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/generate_answer_csv_node.py +0 -0
  248. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/generate_answer_from_image_node.py +0 -0
  249. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/generate_answer_node.py +0 -0
  250. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/generate_answer_node_k_level.py +0 -0
  251. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/generate_answer_omni_node.py +0 -0
  252. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/generate_code_node.py +0 -0
  253. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/generate_scraper_node.py +0 -0
  254. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/get_probable_tags_node.py +0 -0
  255. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/graph_iterator_node.py +0 -0
  256. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/html_analyzer_node.py +0 -0
  257. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/image_to_text_node.py +0 -0
  258. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/markdownify_node.py +0 -0
  259. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/merge_answers_node.py +0 -0
  260. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/merge_generated_scripts_node.py +0 -0
  261. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/parse_node_depth_k_node.py +0 -0
  262. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/prompt_refiner_node.py +0 -0
  263. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/rag_node.py +0 -0
  264. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/reasoning_node.py +0 -0
  265. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/robots_node.py +0 -0
  266. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/search_internet_node.py +0 -0
  267. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/search_link_node.py +0 -0
  268. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/search_node_with_context.py +0 -0
  269. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/nodes/text_to_speech_node.py +0 -0
  270. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/__init__.py +0 -0
  271. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/description_node_prompts.py +0 -0
  272. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/generate_answer_node_csv_prompts.py +0 -0
  273. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/generate_answer_node_omni_prompts.py +0 -0
  274. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/generate_answer_node_pdf_prompts.py +0 -0
  275. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/generate_answer_node_prompts.py +0 -0
  276. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/generate_code_node_prompts.py +0 -0
  277. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/get_probable_tags_node_prompts.py +0 -0
  278. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/html_analyzer_node_prompts.py +0 -0
  279. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/merge_answer_node_prompts.py +0 -0
  280. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/merge_generated_scripts_prompts.py +0 -0
  281. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/prompt_refiner_node_prompts.py +0 -0
  282. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/reasoning_node_prompts.py +0 -0
  283. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/robots_node_prompts.py +0 -0
  284. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/search_internet_node_prompts.py +0 -0
  285. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/search_link_node_prompts.py +0 -0
  286. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/prompts/search_node_with_context_prompts.py +0 -0
  287. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/telemetry/__init__.py +0 -0
  288. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/telemetry/telemetry.py +0 -0
  289. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/__init__.py +0 -0
  290. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/batch_api.py +0 -0
  291. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/cleanup_code.py +0 -0
  292. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/cleanup_html.py +0 -0
  293. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/code_error_analysis.py +0 -0
  294. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/code_error_correction.py +0 -0
  295. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/convert_to_md.py +0 -0
  296. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/copy.py +0 -0
  297. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/custom_callback.py +0 -0
  298. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/data_export.py +0 -0
  299. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/dict_content_compare.py +0 -0
  300. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/llm_callback_manager.py +0 -0
  301. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/logging.py +0 -0
  302. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/model_costs.py +0 -0
  303. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/output_parser.py +0 -0
  304. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/parse_state_keys.py +0 -0
  305. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/prettify_exec_info.py +0 -0
  306. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/proxy_rotation.py +0 -0
  307. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/research_web.py +0 -0
  308. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/save_audio_from_bytes.py +0 -0
  309. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/save_code_to_file.py +0 -0
  310. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/schema_trasform.py +0 -0
  311. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/screenshot_scraping/__init__.py +0 -0
  312. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/screenshot_scraping/screenshot_preparation.py +0 -0
  313. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/screenshot_scraping/text_detection.py +0 -0
  314. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/split_text_into_chunks.py +0 -0
  315. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/sys_dynamic_import.py +0 -0
  316. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/tokenizer.py +0 -0
  317. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/tokenizers/tokenizer_mistral.py +0 -0
  318. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/tokenizers/tokenizer_ollama.py +0 -0
  319. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/scrapegraphai/utils/tokenizers/tokenizer_openai.py +0 -0
  320. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/test +0 -0
  321. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/QUICKSTART.md +0 -0
  322. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/README_TESTING.md +0 -0
  323. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/Readme.md +0 -0
  324. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/conftest.py +0 -0
  325. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/fixtures/benchmarking.py +0 -0
  326. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/fixtures/helpers.py +0 -0
  327. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/fixtures/mock_server/__init__.py +0 -0
  328. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/fixtures/mock_server/server.py +0 -0
  329. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/.env.example +0 -0
  330. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/abstract_graph_test.py +0 -0
  331. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/code_generator_graph_openai_test.py +0 -0
  332. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/depth_search_graph_openai_test.py +0 -0
  333. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/inputs/books.xml +0 -0
  334. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/inputs/example.json +0 -0
  335. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/inputs/plain_html_example.txt +0 -0
  336. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/inputs/username.csv +0 -0
  337. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/scrape_plain_text_mistral_test.py +0 -0
  338. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/scrape_xml_ollama_test.py +0 -0
  339. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/screenshot_scraper_test.py +0 -0
  340. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/script_generator_test.py +0 -0
  341. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/search_graph_openai_test.py +0 -0
  342. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/search_link_ollama.py +0 -0
  343. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/smart_scraper_clod_test.py +0 -0
  344. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/smart_scraper_ernie_test.py +0 -0
  345. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/smart_scraper_fireworks_test.py +0 -0
  346. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/smart_scraper_multi_lite_graph_openai_test.py +0 -0
  347. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/smart_scraper_ollama_test.py +0 -0
  348. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/smart_scraper_openai_test.py +0 -0
  349. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/graphs/xml_scraper_openai_test.py +0 -0
  350. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/inputs/books.xml +0 -0
  351. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/inputs/example.json +0 -0
  352. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/inputs/plain_html_example.txt +0 -0
  353. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/inputs/username.csv +0 -0
  354. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/integration/__init__.py +0 -0
  355. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/integration/test_file_formats_integration.py +0 -0
  356. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/integration/test_multi_graph_integration.py +0 -0
  357. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/integration/test_smart_scraper_integration.py +0 -0
  358. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/nodes/fetch_node_test.py +0 -0
  359. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/nodes/inputs/books.xml +0 -0
  360. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/nodes/inputs/example.json +0 -0
  361. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/nodes/inputs/plain_html_example.txt +0 -0
  362. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/nodes/inputs/username.csv +0 -0
  363. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/nodes/robot_node_test.py +0 -0
  364. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/nodes/search_internet_node_test.py +0 -0
  365. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/nodes/search_link_node_test.py +0 -0
  366. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_atlascloud_model.py +0 -0
  367. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_batch_api.py +0 -0
  368. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_chromium.py +0 -0
  369. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_cleanup_html.py +0 -0
  370. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_csv_scraper_multi_graph.py +0 -0
  371. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_depth_search_graph.py +0 -0
  372. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_fetch_node_timeout.py +0 -0
  373. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_generate_answer_node.py +0 -0
  374. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_json_scraper_graph.py +0 -0
  375. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_json_scraper_multi_graph.py +0 -0
  376. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_minimax_models.py +0 -0
  377. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_models_tokens.py +0 -0
  378. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_omni_search_graph.py +0 -0
  379. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_plasmate.py +0 -0
  380. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_scrape_do.py +0 -0
  381. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_script_creator_multi_graph.py +0 -0
  382. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_search_graph.py +0 -0
  383. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/test_smart_scraper_multi_concat_graph.py +0 -0
  384. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/utils/convert_to_md_test.py +0 -0
  385. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/utils/copy_utils_test.py +0 -0
  386. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/utils/output_parser_test.py +0 -0
  387. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/utils/parse_state_keys_test.py +0 -0
  388. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/utils/research_web_test.py +0 -0
  389. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/utils/test_proxy_rotation.py +0 -0
  390. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/tests/utils/test_sys_dynamic_import.py +0 -0
  391. {scrapegraphai-2.2.1 → scrapegraphai-2.2.2}/uv.lock +0 -0
@@ -42,6 +42,7 @@ jobs:
42
42
  tests/test_batch_api.py
43
43
  tests/test_csv_scraper_multi_graph.py
44
44
  tests/test_depth_search_graph.py
45
+ tests/test_error_page_detection.py
45
46
  tests/test_json_scraper_graph.py
46
47
  tests/test_minimax_models.py
47
48
  tests/test_scrape_do.py
@@ -1,3 +1,10 @@
1
+ ## [2.2.2](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.2.1...v2.2.2) (2026-08-23)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **fetch:** surface HTTP errors and missing content instead of answering NA ([adc92f7](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/adc92f7eff9aa39d70e3848c6867328c3ba2ba2d)), closes [#1102](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1102) [#1102](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1102)
7
+
1
8
  ## [2.2.1](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.2.0...v2.2.1) (2026-08-21)
2
9
 
3
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: scrapegraphai
3
- Version: 2.2.1
3
+ Version: 2.2.2
4
4
  Summary: A web scraping library based on LangChain which uses LLM and direct graph logic to create scraping pipelines.
5
5
  Author-email: Marco Vinciguerra <mvincig11@gmail.com>, Lorenzo Padoan <lorenzo.padoan977@gmail.com>
6
6
  Keywords: ai,artificial intelligence,gpt,graph,langchain,llm,machine learning,natural language processing,nlp,openai,rag,scrapegraph,scrapegraphai,scraping,web scraping,web scraping library,web scraping tool,webscraping
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "scrapegraphai"
3
3
 
4
- version = "2.2.1"
4
+ version = "2.2.2"
5
5
 
6
6
  description = "A web scraping library based on LangChain which uses LLM and direct graph logic to create scraping pipelines."
7
7
  authors = [
@@ -10,6 +10,32 @@ from ..utils import Proxy, dynamic_import, get_logger, parse_or_search_proxy
10
10
  logger = get_logger("web-loader")
11
11
 
12
12
 
13
+ def _warn_on_error_status(response: Any, url: str) -> None:
14
+ """Log a warning when a navigation returned an HTTP error status.
15
+
16
+ Playwright's ``page.goto()`` returns the main-frame ``Response``, but the
17
+ scrapers only keep ``page.content()``. Without this check an error page
18
+ (404, 403, 500, a captcha wall, a login redirect) is indistinguishable
19
+ from the intended document once it reaches the LLM, which then produces a
20
+ confidently wrong answer with no signal that anything went wrong.
21
+
22
+ This mirrors the behaviour of the ``use_soup=True`` path in ``FetchNode``:
23
+ it warns rather than raising, so scraping error pages on purpose keeps
24
+ working.
25
+
26
+ Args:
27
+ response: The ``Response`` returned by ``page.goto()``; may be ``None``
28
+ (for example on a same-document navigation) or lack a usable status.
29
+ url: The URL that was requested, used in the warning message.
30
+ """
31
+ status = getattr(response, "status", None)
32
+ if isinstance(status, int) and status >= 400:
33
+ logger.warning(
34
+ f"Received HTTP {status} for {url}; the scraped content is likely "
35
+ "an error page, not the intended document."
36
+ )
37
+
38
+
13
39
  class ChromiumLoader:
14
40
  """Scrapes HTML pages from URLs using a (headless) instance of the
15
41
  Chromium web driver with proxy protection.
@@ -251,7 +277,8 @@ class ChromiumLoader:
251
277
  context = await browser.new_context()
252
278
  await Malenia.apply_stealth(context)
253
279
  page = await context.new_page()
254
- await page.goto(url, wait_until="domcontentloaded")
280
+ response = await page.goto(url, wait_until="domcontentloaded")
281
+ _warn_on_error_status(response, url)
255
282
  await page.wait_for_load_state(self.load_state)
256
283
 
257
284
  previous_height = None
@@ -364,7 +391,8 @@ class ChromiumLoader:
364
391
  )
365
392
  await Malenia.apply_stealth(context)
366
393
  page = await context.new_page()
367
- await page.goto(url, wait_until="domcontentloaded")
394
+ response = await page.goto(url, wait_until="domcontentloaded")
395
+ _warn_on_error_status(response, url)
368
396
  await page.wait_for_load_state(self.load_state)
369
397
  results = await page.content()
370
398
  logger.info("Content scraped")
@@ -421,7 +449,8 @@ class ChromiumLoader:
421
449
  storage_state=self.storage_state
422
450
  )
423
451
  page = await context.new_page()
424
- await page.goto(url, wait_until="networkidle")
452
+ response = await page.goto(url, wait_until="networkidle")
453
+ _warn_on_error_status(response, url)
425
454
  results = await page.content()
426
455
  logger.info("Content scraped after JavaScript rendering")
427
456
  return results
@@ -93,7 +93,11 @@ class CodeGeneratorGraph(AbstractGraph):
93
93
  parse_node = ParseNode(
94
94
  input="doc",
95
95
  output=["parsed_doc"],
96
- node_config={"llm_model": self.llm_model, "chunk_size": self.model_token},
96
+ node_config={
97
+ "llm_model": self.llm_model,
98
+ "chunk_size": self.model_token,
99
+ "schema": self.schema,
100
+ },
97
101
  )
98
102
 
99
103
  generate_validation_answer_node = GenerateAnswerNode(
@@ -76,6 +76,7 @@ class DocumentScraperGraph(AbstractGraph):
76
76
  "parse_html": False,
77
77
  "chunk_size": self.model_token,
78
78
  "llm_model": self.llm_model,
79
+ "schema": self.schema,
79
80
  },
80
81
  )
81
82
  generate_answer_node = GenerateAnswerNode(
@@ -83,6 +83,7 @@ class OmniScraperGraph(AbstractGraph):
83
83
  "chunk_size": self.model_token,
84
84
  "parse_urls": True,
85
85
  "llm_model": self.llm_model,
86
+ "schema": self.schema,
86
87
  },
87
88
  )
88
89
 
@@ -82,6 +82,7 @@ class ScriptCreatorGraph(AbstractGraph):
82
82
  "chunk_size": self.model_token,
83
83
  "parse_html": False,
84
84
  "llm_model": self.llm_model,
85
+ "schema": self.schema,
85
86
  },
86
87
  )
87
88
 
@@ -110,7 +110,11 @@ class SmartScraperGraph(AbstractGraph):
110
110
  parse_node = ParseNode(
111
111
  input="doc",
112
112
  output=["parsed_doc"],
113
- node_config={"llm_model": self.llm_model, "chunk_size": self.model_token},
113
+ node_config={
114
+ "llm_model": self.llm_model,
115
+ "chunk_size": self.model_token,
116
+ "schema": self.schema,
117
+ },
114
118
  )
115
119
 
116
120
  generate_answer_node = GenerateAnswerNode(
@@ -152,6 +156,7 @@ class SmartScraperGraph(AbstractGraph):
152
156
  node_config={
153
157
  "llm_model": self.llm_model,
154
158
  "chunk_size": self.model_token,
159
+ "schema": self.schema,
155
160
  },
156
161
  )
157
162
 
@@ -74,7 +74,11 @@ class SmartScraperLiteGraph(AbstractGraph):
74
74
  parse_node = ParseNode(
75
75
  input="doc",
76
76
  output=["parsed_doc"],
77
- node_config={"llm_model": self.llm_model, "chunk_size": self.model_token},
77
+ node_config={
78
+ "llm_model": self.llm_model,
79
+ "chunk_size": self.model_token,
80
+ "schema": self.schema,
81
+ },
78
82
  )
79
83
 
80
84
  return BaseGraph(
@@ -5,9 +5,8 @@ A scraping pipeline that uses the OpenAI Batch API for LLM calls,
5
5
  providing 50% cost savings compared to real-time API calls.
6
6
  """
7
7
 
8
- import asyncio
9
8
  from copy import deepcopy
10
- from typing import Dict, List, Optional, Type
9
+ from typing import List, Optional, Type
11
10
 
12
11
  from pydantic import BaseModel
13
12
 
@@ -17,7 +16,6 @@ from ..nodes.merge_answers_node import MergeAnswersNode
17
16
  from ..utils.copy import safe_deepcopy
18
17
  from .abstract_graph import AbstractGraph
19
18
  from .base_graph import BaseGraph
20
- from .smart_scraper_graph import SmartScraperGraph
21
19
 
22
20
 
23
21
  class _FetchParseOnlyGraph(AbstractGraph):
@@ -57,6 +55,7 @@ class _FetchParseOnlyGraph(AbstractGraph):
57
55
  node_config={
58
56
  "llm_model": self.llm_model,
59
57
  "chunk_size": self.model_token,
58
+ "schema": self.schema,
60
59
  },
61
60
  )
62
61
 
@@ -70,7 +70,11 @@ class SpeechGraph(AbstractGraph):
70
70
  parse_node = ParseNode(
71
71
  input="doc",
72
72
  output=["parsed_doc"],
73
- node_config={"chunk_size": self.model_token, "llm_model": self.llm_model},
73
+ node_config={
74
+ "chunk_size": self.model_token,
75
+ "llm_model": self.llm_model,
76
+ "schema": self.schema,
77
+ },
74
78
  )
75
79
 
76
80
  generate_answer_node = GenerateAnswerNode(