Head
2026-08-12 04:40:47 [scrapy.utils.log] INFO: Scrapy 2.14.1 started (bot: event_scrapers)
2026-08-12 04:40:47 [scrapy.utils.log] INFO: Versions:
{'lxml': '6.0.2',
'libxml2': '2.14.6',
'cssselect': '1.3.0',
'parsel': '1.10.0',
'w3lib': '2.0.0',
'Twisted': '25.5.0',
'Python': '3.12.3 (main, Jun 19 2026, 12:46:00) [GCC 13.3.0]',
'pyOpenSSL': '25.3.0 (OpenSSL 3.5.4 30 Sep 2025)',
'cryptography': '46.0.3',
'Platform': 'Linux-6.8.0-90-generic-x86_64-with-glibc2.39'}
2026-08-12 04:40:47 [scrapy.crawler] DEBUG: Using AsyncCrawlerProcess
2026-08-12 04:40:47 [asyncio] DEBUG: Using selector: EpollSelector
2026-08-12 04:40:47 [scrapy.addons] INFO: Enabled addons:
[]
2026-08-12 04:40:47 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.asyncioreactor.AsyncioSelectorReactor
2026-08-12 04:40:47 [scrapy.utils.log] DEBUG: Using asyncio event loop: asyncio.unix_events._UnixSelectorEventLoop
2026-08-12 04:40:47 [scrapy.extensions.telnet] INFO: Telnet Password: 61600944f3c4e5e1
2026-08-12 04:40:47 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.corestats.CoreStats',
'scrapy.extensions.logcount.LogCount',
'scrapy.extensions.telnet.TelnetConsole',
'scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.feedexport.FeedExporter',
'scrapy.extensions.logstats.LogStats']
2026-08-12 04:40:47 [scrapy.crawler] INFO: Overridden settings:
{'BOT_NAME': 'event_scrapers',
'FEED_EXPORT_ENCODING': 'utf-8',
'FEED_URI_PARAMS': <function _feed_uri_params at 0x75e9c442f4c0>,
'LOG_FILE': '/root/event-list-scraping/logs/event_scrapers/westportplayhouse/387c9e3395f711f19a230050565fa5d9.log',
'NEWSPIDER_MODULE': 'event_scrapers.spiders',
'REQUEST_FINGERPRINTER_CLASS': 'scrapy_zyte_api.ScrapyZyteAPIRequestFingerprinter',
'SPIDER_MODULES': ['event_scrapers.spiders']}
2026-08-12 04:40:47 [scrapy_zyte_api.handler] INFO: Using a Zyte API key starting with 'ff9baec'
2026-08-12 04:40:47 [scrapy_zyte_api.handler] INFO: Using a Zyte API key starting with 'ff9baec'
2026-08-12 04:40:47 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.offsite.OffsiteMiddleware',
'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_zyte_api.ScrapyZyteAPIDownloaderMiddleware',
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
'scrapy.downloadermiddlewares.stats.DownloaderStats']
2026-08-12 04:40:47 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.start.StartSpiderMiddleware',
'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
'scrapy_zyte_api.ScrapyZyteAPISpiderMiddleware',
'scrapy.spidermiddlewares.referer.RefererMiddleware',
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
'scrapy.spidermiddlewares.depth.DepthMiddleware',
'scrapy_zyte_api.ScrapyZyteAPIRefererSpiderMiddleware']
2026-08-12 04:40:47 [scrapy.middleware] INFO: Enabled item pipelines:
['event_scrapers.pipelines.EventScrapersPipeline']
2026-08-12 04:40:47 [py.warnings] WARNING: /root/.venv/lib/python3.12/site-packages/scrapy/pipelines/__init__.py:41: ScrapyDeprecationWarning: EventScrapersPipeline.open_spider() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute.
self._check_mw_method_spider_arg(pipe.open_spider)
2026-08-12 04:40:47 [py.warnings] WARNING: /root/.venv/lib/python3.12/site-packages/scrapy/pipelines/__init__.py:47: ScrapyDeprecationWarning: EventScrapersPipeline.process_item() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute.
self._check_mw_method_spider_arg(pipe.process_item)
2026-08-12 04:40:47 [scrapy.core.engine] INFO: Spider opened
2026-08-12 04:40:47 [py.warnings] WARNING: /root/.venv/lib/python3.12/site-packages/scrapy/core/spidermw.py:490: ScrapyDeprecationWarning: event_scrapers.spiders.west_port_play_house.ListingSpider defines the deprecated start_requests() method. start_requests() has been deprecated in favor of a new method, start(), to support asynchronous code execution. start_requests() will stop being called in a future version of Scrapy. If you use Scrapy 2.13 or higher only, replace start_requests() with start(); note that start() is a coroutine (async def). If you need to maintain compatibility with lower Scrapy versions, when overriding start_requests() in a spider class, override start() as well; you can use super() to reuse the inherited start() implementation without copy-pasting. See the release notes of Scrapy 2.13 for details: https://docs.scrapy.org/en/2.13/news.html
warn(
2026-08-12 04:40:47 [westportplayhouse] INFO: Sending scraped events to prod API
2026-08-12 04:40:47 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2026-08-12 04:40:47 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2026-08-12 04:40:52 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.westportplayhouse.org/whats-on/> (referer: https://www.westportplayhouse.org/whats-on/)
2026-08-12 04:40:58 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.westportplayhouse.org/show/ailey-ii-the-next-generation-of-dance/> (referer: https://www.westportplayhouse.org/whats-on/)
2026-08-12 04:40:58 [urllib3.connectionpool] DEBUG: Starting new HTTPS connection (1): norwalklist.org:443
2026-08-12 04:40:58 [urllib3.connectionpool] DEBUG: https://norwalklist.org:443 "POST /api/v1/raw-events/ HTTP/1.1" 201 6331
2026-08-12 04:40:58 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.westportplayhouse.org/show/ailey-ii-the-next-generation-of-dance/>
{'event_url': 'https://www.westportplayhouse.org/show/ailey-ii-the-next-generation-of-dance/',
'platform': 'West por play house',
'platform_hash': '4ee34008baf00f04b0d4bd1144a5a429',
'raw_body': '<div class="container-fluid" id="main_content">\n'
'<div class="row">\n'
'<div class="col-xs-12">\n'
'<div class="container">\n'
'<div class="row">\n'
'<div class="col-xs-12 col-md-8 contentarea" '
'sdata-mh="mtchright">\n'
'<h2><strong>Coming up at the Playhouse this fall!</strong></h2>\n'
'<p>For over 50 years, Ailey II – The Next Generation of Dance – '
'has merged the spirit and energy of the country’s finest '
'early-career dance talent with the passion and creative vision '
'of today’s most outstanding and emerging choreographers. Founded '
'by Alvin Ailey in 1974, this universally renowned company '
'embodies his pioneering mission to establish an extended '
'cultural community that provides dance performances, training, '
'and community programs for all people. Under the leadership of '
'Sylvia Waters, who served as artistic director for 38 seasons, '
'Ailey II flourished into one of the most popular modern dance '
'companies, combining a rigorous touring schedule with extensive '
Tail
'href="https://www.wshu.org/">WSHU Public '
'Radio</a>.</strong></p>\n'
'</div>\n'
'</div>\n'
'<div class="row">\n'
'<div class="col-xs-12 paddme-extra" data-aos="fade-up" '
'data-aos-offset="200">\n'
'<h1><strong>Become a Member of The Encore Club</strong></h1>\n'
'<p>A membership program, filled with perks and exclusive access! '
'Learn more and enroll <a '
'href="https://www.westportplayhouse.org/the-encore-club/"><strong>HERE</strong></a>!</p>\n'
'<p><a href="https://tickets.westportplayhouse.org/6740"><img '
'alt="" class="alignnone wp-image-14399 size-medium" '
'decoding="async" height="160" loading="lazy" sizes="auto, '
'(max-width: 300px) 100vw, 300px" '
'src="http://www.westportplayhouse.org/wp-content/uploads/2024/04/The-Encore-Club-740x400-smaller-300x160.jpg" '
'srcset="https://www.westportplayhouse.org/wp-content/uploads/2024/04/The-Encore-Club-740x400-smaller-300x160.jpg '
'300w, '
'https://www.westportplayhouse.org/wp-content/uploads/2024/04/The-Encore-Club-740x400-smaller-18x10.jpg '
'18w, '
'https://www.westportplayhouse.org/wp-content/uploads/2024/04/The-Encore-Club-740x400-smaller.jpg '
'750w" width="300"/></a></p>\n'
'</div>\n'
'</div>\n'
'<div class="row">\n'
'<div class="col-xs-12 paddme-extra" data-aos="fade-up" '
'data-aos-offset="200">\n'
'<h6>All titles, dates, and artists are subject to change.</h6>\n'
'</div>\n'
'</div>\n'
'</div>\n'
'<div class="col-xs-12 col-md-4 no-gutters" sdata-mh="mtchright" '
'sid="sidy-wrapper">\n'
'<div class="show_extras" sid="sidy">\n'
'<div class="show_special_event_dates">\n'
' Saturday, August 22, 2026 at '
'4PM </div>\n'
'<div class="show_special_event_title">\n'
' Silly Dilly '
'Songs </div>\n'
'<div class="show_special_event_description">Written by '
'<strong>Alan Katz</strong>\n'
'</div><div '
'class="show_special_event_description"><strong>Recommended Ages: '
'</strong>2-8 year olds\n'
'</div> <div class="btn-grp">\n'
'<a class="btn btn-secondary btn-block btn-highlight" '
'href="https://tickets.westportplayhouse.org/7449">Get '
'tickets</a><div class="btn btn-disabled btn-block">$30</div> '
'</div>\n'
'</div>\n'
'</div>\n'
'</div>\n'
'</div>\n'
'</div>\n'
'</div>\n'
'</div>'}
2026-08-12 04:40:59 [urllib3.connectionpool] DEBUG: Starting new HTTPS connection (1): norwalklist.org:443
2026-08-12 04:40:59 [urllib3.connectionpool] DEBUG: https://norwalklist.org:443 "POST /api/v1/raw-events/ HTTP/1.1" 201 4636
2026-08-12 04:40:59 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.westportplayhouse.org/show/script-in-hand-title-september/>
{'event_url': 'https://www.westportplayhouse.org/show/script-in-hand-title-september/',
'platform': 'West por play house',
'platform_hash': '4ee34008baf00f04b0d4bd1144a5a429',
'raw_body': '<div class="container-fluid" id="main_content">\n'
'<div class="row">\n'
'<div class="col-xs-12">\n'
'<div class="container">\n'
'<div class="row">\n'
'<div class="col-xs-12 col-md-8 contentarea" '
'sdata-mh="mtchright">\n'
'<h2><span style="color: #f26522;">Our 2026 Script in Hand '
'series!</span></h2>\n'
'<p>Stay tuned for the title announcement of our September Script '
'in Hand playreading!</p>\n'
'<div class="row">\n'
'<div class="col-xs-12 paddme-extra">\n'
'</div>\n'
'</div>\n'
'<div class="row">\n'
'<div class="col-xs-12 paddme-extra" data-aos="fade-up" '
'data-aos-offset="200">\n'
'</div>\n'
'</div>\n'
'<div class="row">\n'
'<div class="col-xs-12 paddme-extra" data-aos="fade-up" '
'data-aos-offset="200">\n'
'<h1>ABOUT SCRIPT IN HAND PLAYREADINGS</h1>\n'
'<p><strong><span style="color: #ea380f;">Every Script in Hand '
'playreading is a brand new experience.</span></strong></p>\n'
'<p>At a Script in Hand playreading, <strong>there’s</strong>\xa0'
'<b data-stringify-type="bold">nothing between you and the actors '
'on stage.</b>\xa0These readings bring actors who’ve just met — '
'or who’ve known each other for years — together for one day to '
'rehearse and perform a play\xa0<strong>on a bare stage, with '
'simple lighting</strong>\xa0— and you. The audience is in charge '
'of conjuring the set, costumes, and atmosphere — or nothing at '
'all. Actors, audience, and the director come together to create '
'a special, one-night-only experience.</p>\n'
'<p data-pm-slice="1 1 []">Learn about our <strong>Script in Hand '
'2025 Season</strong> and becoming <strong>a Subscriber <a '
'class="ProsemirrorEditor-link" '
'href="https://www.westportplayhouse.org/script-in-hand-series-2025/">HERE</a></strong>!</p>\n'
'<p data-pm-slice="1 1 []">Stay tuned for information about '
'our\xa0<strong>2026 Season!</strong></p>\n'
'</div>\n'
'</div>\n'
'<div class="row" data-aos="fade-up" data-aos-offset="200">\n'
'<div class="col-xs-12 text-left">\n'
'<h1>\n'
' MEET THE '
'CURATOR </h1>\n'
'</div>\n'
'<div class="col-xs-6 col-md-3 cast_card hover_link" '
'data-person-url="https://www.westportplayhouse.org/person/mark-shanahan/">\n'
'<img class="img-responsive" '
'src="https://www.westportplayhouse.org/wp-content/uploads/2020/12/Shanahan-Mark_600x600_by-Mark-Smith-500x500.jpg"/><div '
'class="cast_hover_shade">\n'
'<div class="cast_content">\n'
'<div class="cast_name">Mark Shanahan</div>\n'
'<div class="cast_char">Curator, Script in Hand series</div>\n'
'</div>\n'
'</div></div> </div>\n'
'<div class="row">\n'
'<div class="col-xs-12 paddme-extra" data-aos="fade-up" '
'data-aos-offset="200">\n'
'<h1 aria-level="2" data-uw-rm-heading="level" '
'data-uw-styling-context="true" role="heading">THANK YOU</h1>\n'
'<p aria-level="2" data-uw-rm-heading="level" '
'data-uw-styling-context="true" role="heading">The 2025 Script in '
'Hand Playreading Series is supported by <strong>Joyce '
'Hergenhan</strong>\xa0and the White Barn program of the<strong> '
'Lucille Lortel Foundation</strong>.</p>\n'
'<p aria-level="2" data-uw-rm-heading="level" '
'data-uw-styling-context="true" role="heading">2025 Programming '
'& Season Sponsorship is generously provided by '
'<strong>Barbara Streicker</strong>.</p>\n'
'<h6 data-uw-styling-context="true">All titles, dates, and '
'artists are subject to change.</h6>\n'
'</div>\n'
'</div>\n'
'<div class="row">\n'
'<div class="col-xs-12 paddme-extra" data-aos="fade-up" '
'data-aos-offset="200">\n'
'<h1><span style="color: #ffffff;">.</span></h1>\n'
'</div>\n'
'</div>\n'
'</div>\n'
'<div class="col-xs-12 col-md-4 no-gutters" sdata-mh="mtchright" '
'sid="sidy-wrapper">\n'
'<div class="show_extras" sid="sidy">\n'
'<div class="show_special_event_dates">\n'
' Monday, September 14, 2026 at '
'7PM </div>\n'
'<div class="show_special_event_title">\n'
' Script In Hand: '
'TBA </div>\n'
'<div class="show_special_event_description">series curated by '
'<strong>Mark Shanahan</strong>\n'
'</div> <div class="btn-grp">\n'
'<a class="btn btn-secondary btn-block btn-highlight" '
'href="https://tickets.westportplayhouse.org/7108">$35</a><div '
'class="btn btn-disabled btn-block">$30 for series subscribers '
'and Encore Club members</div> </div>\n'
'</div>\n'
'</div>\n'
'</div>\n'
'</div>\n'
'</div>\n'
'</div>\n'
'</div>'}
2026-08-12 04:40:59 [scrapy.core.engine] INFO: Closing spider (finished)
2026-08-12 04:40:59 [scrapy.extensions.feedexport] INFO: Stored csv feed (5 items) in: output/2026/08/12/westportplayhouse.csv
2026-08-12 04:40:59 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 5069,
'downloader/request_count': 6,
'downloader/request_method_count/GET': 6,
'downloader/response_bytes': 101842,
'downloader/response_count': 6,
'downloader/response_status_count/200': 6,
'elapsed_time_seconds': 11.793288,
'feedexport/success_count/FileFeedStorage': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2026, 8, 12, 2, 40, 59, 322976, tzinfo=datetime.timezone.utc),
'httpcompression/response_bytes': 474310,
'httpcompression/response_count': 6,
'item_scraped_count': 5,
'items_per_minute': 27.272727272727273,
'log_count/DEBUG': 21,
'log_count/INFO': 3,
'memusage/max': 99635200,
'memusage/startup': 99635200,
'request_depth_max': 1,
'response_received_count': 6,
'responses_per_minute': 32.72727272727273,
'scheduler/dequeued': 6,
'scheduler/dequeued/memory': 6,
'scheduler/enqueued': 6,
'scheduler/enqueued/memory': 6,
'start_time': datetime.datetime(2026, 8, 12, 2, 40, 47, 529688, tzinfo=datetime.timezone.utc)}
2026-08-12 04:40:59 [scrapy.core.engine] INFO: Spider closed (finished)