Scrapy Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
Всем доброго дня!
Написал простенький паучек. Код ниже:
import scrapy
class SpiderProsyr(scrapy.Spider):
name = 'SpiderProsyr'
starturl = ['https://pro-syr.ru/zakvaski-dlya-syra/']
def parse(self, response):
links = [data.get() for data in response.css('div.item_img1 a::attr(href)')] # все ссылки на товары
# после yield код продолжит работать у нас произойдет асинхронная работа в callback передаем что делаем в карточке
for link in links:
yield response.follow(link, callback=self.parse_card)
def parse_card(self, response):
name = response.css('h1::text').get()
price = response.css('span.autocalc-product-price::text').get()
availability = response.css('div.product-description b.outstock::text').get()
type_of_starter = response.css('table tbody tr td:nth-child(n+2)::text').get()
per_volume_of_milk = response.css('table tbody:nth-child(n+3) tr td:nth-child(n+2)::text').get()
suitable_for_cheeses = response.css(
'table tbody:nth-child(n+4) tr:nth-child(n+2) td:nth-child(n+2)::text').get()
сountry_of_origin = response.css('table tbody:nth-child(n+5) tr:nth-child(n+2) td:nth-child(n+2)::text').get()
company = response.css('table tbody:nth-child(n+5) tr:nth-child(n+1) td:nth-child(n+2)::text').get()
yield {
'name': name,
'price': price,
'availability': availability,
'type_of_starter': type_of_starter,
'per_volume_of_milk': per_volume_of_milk,
'suitable_for_cheeses': suitable_for_cheeses,
'сountry_of_origin': сountry_of_origin,
'company': company
}
# response.css('h1::text').get() заголовок
# response.css('span.autocalc-product-price::text').get() цена
# response.css('div.product-description b.outstock::text').get() наличие
# response.css('table tbody tr td:nth-child(n+2)::text').get() тип закваски n+2 второй вложенный блок
# response.css('table tbody:nth-child(n+3) tr td:nth-child(n+2)::text').get() на обьем молока
# response.css('table tbody:nth-child(n+4) tr:nth-child(n+2) td:nth-child(n+2)::text').get() подходит для сыров
# response.css('table tbody:nth-child(n+5) tr:nth-child(n+2) td:nth-child(n+2)::text').get() страна производитель
# response.css('table tbody:nth-child(n+5) tr:nth-child(n+1) td:nth-child(n+2)::text').get() компания
# Достаем с главной странички https://pro-syr.ru/zakvaski-dlya-syra/ все ссылки на товары response.css('div.item_img1 a::attr(href)')
# Что бы получить список ссылок: [data.get() for data in response.css('div.item_img1 a::attr(href)')]
При запуске сразу же получаю ошибку, точнее не ошибку, он попросту не хочет работать.
2024-08-13 15:00:54 [scrapy.utils.log] INFO: Scrapy 2.11.0 started (bot: ddproject)
2024-08-13 15:00:54 [scrapy.utils.log] INFO: Versions: lxml 5.3.0.0, libxml2 2.11.7, cssselect 1.2.0, parsel 1.9.1, w3lib 2.2.1, Twisted 22.10.0, Python 3.12.4 | packaged by Anaconda, Inc. | (main, Jun 18 2024, 15:03:56) [MSC v.1929 64 bit (AMD64)], pyOpenSSL 24.2.1 (OpenSSL 3.3.1 4 Jun 2024), cryptography 43.0.0, Platform Windows-10-10.0.19045-SP0
2024-08-13 15:00:54 [scrapy.addons] INFO: Enabled addons:
[]
2024-08-13 15:00:54 [asyncio] DEBUG: Using selector: SelectSelector
2024-08-13 15:00:54 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.asyncioreactor.AsyncioSelectorReactor
2024-08-13 15:00:54 [scrapy.utils.log] DEBUG: Using asyncio event loop: asyncio.windows_events._WindowsSelectorEventLoop
2024-08-13 15:00:54 [scrapy.extensions.telnet] INFO: Telnet Password: c3fb4cf0cc746ec0
2024-08-13 15:00:54 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.corestats.CoreStats',
'scrapy.extensions.telnet.TelnetConsole',
'scrapy.extensions.logstats.LogStats']
2024-08-13 15:00:54 [scrapy.crawler] INFO: Overridden settings:
{'BOT_NAME': 'ddproject',
'FEED_EXPORT_ENCODING': 'utf-8',
'NEWSPIDER_MODULE': 'ddproject.spiders',
'REQUEST_FINGERPRINTER_IMPLEMENTATION': '2.7',
'ROBOTSTXT_OBEY': True,
'SPIDER_MODULES': ['ddproject.spiders'],
'TWISTED_REACTOR': 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'}
2024-08-13 15:00:55 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware',
'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
'scrapy.downloadermiddlewares.retry.RetryMiddleware',
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
'scrapy.downloadermiddlewares.stats.DownloaderStats']
2024-08-13 15:00:55 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
'scrapy.spidermiddlewares.referer.RefererMiddleware',
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
'scrapy.spidermiddlewares.depth.DepthMiddleware']
2024-08-13 15:00:55 [scrapy.middleware] INFO: Enabled item pipelines:
[]
2024-08-13 15:00:55 [scrapy.core.engine] INFO: Spider opened
2024-08-13 15:00:55 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2024-08-13 15:00:55 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2024-08-13 15:00:55 [scrapy.core.engine] INFO: Closing spider (finished)
2024-08-13 15:00:55 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'elapsed_time_seconds': 0.001999,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2024, 8, 13, 11, 0, 55, 33915, tzinfo=datetime.timezone.utc),
'log_count/DEBUG': 3,
'log_count/INFO': 10,
'start_time': datetime.datetime(2024, 8, 13, 11, 0, 55, 31916, tzinfo=datetime.timezone.utc)}
2024-08-13 15:00:55 [scrapy.core.engine] INFO: Spider closed (finished)
Пробовал отладку, плучаю сообщение, которое указанно выше в момент когда наследуюсь.
class SpiderProsyr(scrapy.Spider):
Так же проверял все селекторы, проверял по одному - все работает.
Подскажите как пофиксить пожалуйста, кто сталкивался с таким. Буду очень благодарен.
Ответы (1 шт):
Автор решения: Черный Сергей Николаевич
→ Ссылка
В ходе долгих изучений документации стало ясно, что:
При запуске паука запускается наш класс, который мы наследуем, и в нем обязательные поля следующие:
name
start_urls
Данный код рабочий, полностью. Ошибка была в starturl
. Будьте внимательнее, и будет Вам счатье.