Scraper 的目标是分析哪些棋盘游戏获得最多点赞并将其打印在排序列表中。基本上是一本“名字:竖起大拇指”的字典。 以下是我要排序的游戏列表: https://boardgamegeek.com/geeklist/268396/20-most-anticipated-games-2020-11th-year-nominatio
我正在Python中使用Scrapy框架。我发现以下命令可以很好地提取标题和点赞:
response.css('.fl > a:nth-child(2)::text').getall()
response.css('.recs a::text').getall()
当游戏获得 0 点赞时就会出现问题,然后 Scrapy 就会跳过该点赞。 这意味着标题列表不仅仅是点赞列表。例如,使用上面的命令我可以获得 25 个标题的列表和 20 个点赞的列表。 有没有办法将空字符串转换为默认值 0,以便姓名列表和点赞列表相等?喜欢:
response.css('.recs a::text').getall(default="0")
当没有竖起大拇指时,它看起来像这样:
<a aria-label="Recommendations and tip info" class="js-score" href="javascript://" onclick="RecSpy( 'listitem', '7520669', 'tippers' ); return false;"></a>
最佳答案
您可以获取包含喜欢和棋盘游戏名称的每个选择器,而不是从主 DOM 中单独收集每个棋盘游戏及其喜欢的内容,例如
games = response.css('.mb5') # fetch every selector with class "mb5"
for game in games:
name = game.css('.fl > a:nth-child(2)::text').get()
likes = game.css('.recs a::text').get() or 0
...
伪代码,但我希望你明白。
关于适用于 Boardgamegeek 的 Python Webscraper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60134839/