适用于 Boardgamegeek 的 Python Webscraper

标签 python scrapy

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/

相关文章:

python - 使用scrapy、python提取url的标题

python - 如何将Python字符串更改为无符号字符数组?

Python正则表达式,如何替换段落中两个单词之间的文本?

python - FIFO 管道仅在写入端关闭后读取

python - 将蜘蛛的输出保存在变量中而不是文件中

web-scraping - Scrapy:每个蜘蛛一个 jobdir

python - Strapi:连接到 MySQL

python - 鼠标点击矩形的困境

python - 仅计算数据框中没有 NaN 值的数据行的平均值

unicode - Scrappy 的方法 re() 不适用于 Unicode 字符串