Closed cloudy-sfu closed 2 years ago
补充一些细节:
定位到错误发生位置是 weibo/spider/search.py
文件的 parse_weibo
函数, 您使用了3条 xpath 分别定位转赞评的数量.
reposts_count = sel.xpath('.//a[@action-type="feed_list_forward"]/text()').extract_first()
comments_count = sel.xpath('.//a[@action-type="feed_list_comment"]/text()').extract_first()
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&suda-data=key%3Dtblog_search_weibo%26value%3Dweibo_h_1_p_p" suda-data="key=tblog_search_weibo&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.
感谢反馈。已经修复了,非常细心的issue,对修复很有帮助,再次感谢,如果还有疑问,欢迎继续讨论。
仍然存在2个问题:
已经基本定位到转发的问题, 转发获得的 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&mid=4685464248516970&name=璞璞璞子&uid=637425&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&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()
之后, 只获得到空值, 非常奇怪.
打出
sel.xpath('.//a[@action-type="feed_list_forward"]/text()').extract()
的结果是
[' ', ' 7']
所以使用的 extract_first() 是得到空值.
如果我直接改成 extract()[1] 可以解决问题, 不知道是不是治本了.
感谢。已经非常不错了,不但发现问题而且给出了解决方案。打算用上面的方法,但这是你的方法,如果方便,您可以通过pull request的方式提交修复,这样您还能成为本程序的Contributor,这不是强制的。如果您不方便,我会在几天之后提交修改。再次感谢。
默认保存到csv文件, "点赞数"一列全部是0, 手工抽检部分推文, 点赞数实际上不为0. 文件中的"评论数"正常.