dataabc / weibo-search

获取微博搜索结果信息,搜索即可以是微博关键词搜索,也可以是微博话题搜索
1.7k stars 372 forks source link

BUG REPORT: 所有的点赞数都是0. #109

Closed cloudy-sfu closed 2 years ago

cloudy-sfu commented 2 years ago

默认保存到csv文件, "点赞数"一列全部是0, 手工抽检部分推文, 点赞数实际上不为0. 文件中的"评论数"正常.

cloudy-sfu commented 2 years ago

补充一些细节:

定位到错误发生位置是 weibo/spider/search.py 文件的 parse_weibo 函数, 您使用了3条 xpath 分别定位转赞评的数量.

  1. reposts_count = sel.xpath('.//a[@action-type="feed_list_forward"]/text()').extract_first()
  2. comments_count = sel.xpath('.//a[@action-type="feed_list_comment"]/text()').extract_first()
  3. attitudes_count = sel.xpath('(.//a[@action-type="feed_list_like"])[last()]/em/text()').extract_first()

我挑了其中没出问题的评论数, sel变量的内容是:

<a class="woo-box-flex woo-box-alignCenter woo-box-justifyCenter" href="javascript:void(0);" action-data="pageid=weibo&amp;suda-data=key%3Dtblog_search_weibo%26value%3Dweibo_h_1_p_p" suda-data="key=tblog_search_weibo&amp;value=seqid:1635770718857011879311|type:1|t:0|pos:1-0|q:%E5%8E%9F%E7%A5%9E|ext:cate:31,mpos:1,click:comment" action-type="feed_list_comment">
    <span class="woo-box-flex woo-box-alignCenter woo-box-justifyCenter toolbar_iconWrap">
        <i class="woo-font woo-font--comment toolbar_icon"></i>
    </span> 
    评论
</a>

我本想参照评论数, 观察点赞数和转发数在什么位置. 但是, 按照你定位的内容, 其实里面没有任何一条是关于评论数量的.

事实上整个sel变量中只有一个数字, 是

<span class="woo-like-count">6</span>

这个数字其实是点赞数. 我猜想, 原因应该是微博更改了一些 class name. 由于我自己通常用beautifulsoup解析页面, 我不知道正确的 xpath 代码应该怎么写. 因此我建议通过 span 里面的 class name 获取正确的值. 之后我可能会尝试修改这个代码, 如果成功了, 会在这个 Issue 下面包含一个文件.

希望以上内容对你排除错误有所帮助, 谢谢.

附件1: 将 sel 变量导出成为一个 HTML 文件, 这个微博的真实数值是: 转 0 评 0 赞 6.

New Text Document.txt

dataabc commented 2 years ago

感谢反馈。已经修复了,非常细心的issue,对修复很有帮助,再次感谢,如果还有疑问,欢迎继续讨论。

cloudy-sfu commented 2 years ago

仍然存在2个问题:

  1. 转发数爬不到.
  2. 点赞数要增加 "\d+.*" 的正则.

已经基本定位到转发的问题, 转发获得的 xpath 如果是 .//a[@action-type="feed_list_forward"], 则能够获取到:

<a class="woo-box-flex woo-box-alignCenter woo-box-justifyCenter" href="javascript:void(0);" action-data="allowForward=1&amp;mid=4685464248516970&amp;name=璞璞璞子&amp;uid=637425&amp;suda-data=key%3Dtblog_search_weibo%26value%3Dseqid%3A163578286793709910318%7Ctype%3A1%7Ct%3A0%7Cpos%3A1-0%7Cq%3A%25E5%258E%259F%25E7%25A5%259E%7Cext%3Acate%3A31%2Cclick:do_repost,mid:4685464248516970" action-type="feed_list_forward" suda-data="key=tblog_search_weibo&amp;value=seqid:163578286793709910318|type:1|t:0|pos:1-0|q:%E5%8E%9F%E7%A5%9E|ext:cate:31,mpos:19,click:repost,mid:4685464248516970"> <span class="woo-box-flex woo-box-alignCenter woo-box-justifyCenter toolbar_iconWrap"><i class="woo-font woo-font--retweet toolbar_icon"></i></span> 7</a>

但是增加了 /text() 之后, 只获得到空值, 非常奇怪.

cloudy-sfu commented 2 years ago

打出

sel.xpath('.//a[@action-type="feed_list_forward"]/text()').extract()

的结果是

[' ', ' 7']

所以使用的 extract_first() 是得到空值.

如果我直接改成 extract()[1] 可以解决问题, 不知道是不是治本了.

dataabc commented 2 years ago

感谢。已经非常不错了,不但发现问题而且给出了解决方案。打算用上面的方法,但这是你的方法,如果方便,您可以通过pull request的方式提交修复,这样您还能成为本程序的Contributor,这不是强制的。如果您不方便,我会在几天之后提交修改。再次感谢。