我已经写了一个蜘蛛来爬行boardgamegeek.com/browse/boardgame网站,以获取有关列表中桌面游戏的信息。
我的问题是,在我的代码中拉出两个特定的选择器时,并不总是会为这些选择器接收响应,有时它会返回一个选择器对象,而不是它。在调试期间检查响应后,代码中不存在动态加载的选择器。
我的两个违规行
bggspider.py
bg['txt_cnt'] = response.xpath(
selector_paths.SEL_TXT_REVIEWS).extract_first()
bg['vid_cnt'] = response.xpath(
selector_paths.SEL_VID_REVIEWS).extract_first()
选择器定义为
selector_paths.py
SEL_TXT_REVIEWS = '//div[@class="panel-inline-
links"]/a[contains(text(), "All Text Reviews")]/text()'
SEL_VID_REVIEWS = '//div[@class="panel-inline-
links"]/a[contains(text(), "All Video Reviews")]/text()'
在产生bg项目之后,在管道中处理属性以执行检查,因为许多桌面游戏对页面的各个部分的信息非常少。
pipelines.py
if item['txt_cnt']:
item['txt_cnt'] = int(re.findall('\d+', item['txt_cnt'])[0])
else:
item['txt_cnt'] = 0
if item['vid_cnt']:
item['vid_cnt'] = int(re.findall('\d+', item['vid_cnt'])[0])
else:
item['vid_cnt'] = 0
字段处理的目的只是获取字符串中的数值,这是一个桌面游戏的文本和视频评论的数量。
我假设我错过了一些与Splash有关的东西,因为我正在为一些/大多数查询获取选择器项目,但仍然缺少很多。 我在本地运行ScrapySplash docker容器,localhost:8050。
蜘蛛的代码可以在这里找到。 BGGSpider on Github
有关如何解决此问题或ScrapySplash如何工作的任何帮助或信息将不胜感激。