巴哈瀑布流 Side Project 开发笔记 -5:巴哈场外休憩区C页爬虫(楼层内文显示)

0

巴哈场外休憩区C页爬虫 - 楼层内文显示

接下来是C页的内容,也是阅览器的重点,毕竟大家不是看看标题就饱了对吧?
我是先做显示文章的主楼,再加入显示主楼留言区的功能,最后再将所有楼层的显示做出来,以及换页

把 Function 当 Props 在传

这招是小哈教我的,失智列车网站也有应用,而在这个 Side Project 则是频繁用到

设定 Hook 的 State ,必定是利用 setState 函式
嗯?那如果我们把这个函式当作某个子元件的 Props ,把它传进去,然后在子元件内触发呢?
也就是说,我可以做到在子元件内判断要不要改变父元件的状态

具体是在哪些地方用到? 比如说:页面开关

ArticleBlock 有个 Props setOpenSet_ArticleData
就是用来放入父元件 App 设定状态所使用的 setOpenArticleBoolsetDisplay_article 函式
当某个 ArticleBlock 被点击时,ArticleBlock 改变父元件的 OpenArticleBool 与,Display_article
假如 OpenArticleBool 为真,则在主页显示对应的文章内文(ArticleBody)

其他还有很多,包括闇黑模式也都有用到,但上方的举例都有说到重点,这边就不一一细讲

内文一把抓 - dangerouslySetInnerHTML

还记得上面闇黑模式提到的无解问题吗?

其最根本原因就是因为:巴哈瀑布流的楼层内文是直接把整段HTML原封不动抓下来显示在对应区域
body

办到这一点的便是「dangerouslySetInnerHTML」
用法很简单,它就像一个HTML的属性,你爬回来一整段HTML后,存成变数当作属性的值即可

替换巴哈对于媒体内容的的自订属性

当然最终结果也不是说真的原汁原味,我抓下来之后还是有做一些基本的筛选润饰

像是巴哈的连结,全部都有 data 前缀(例如 data-src),这爬回来不就没办法正常显示了嘛?
所以我要将爬回来的内文筛出所有我需要改的 Element ,将原本的属性去掉再加上新的属性和原本的值
img

资料筛选反而是这 Side Project 最累人的部分

换页与层数

巴哈文章中,所有内文区域的东西,都是 class 叫作 c-section 的玩意儿
我是靠 for迴圈 去抓每一个 c-section 内的东西来拿这个楼层的内容,没有更好的方法

而这之中,关于 c-section 的排序,我观察出几个状况:

回覆数不到21个,所以开头没有页码回覆数破20,所以开头有一个 c-section 显示页码无论有没有页码,主楼下面肯定是该死的 猜你喜欢,它也是一个 c-section当有 文章被删除 或 被嘘到摺叠,将会生成两个该楼层的 c-section大家都在看 是一个 c-section 内容几乎没在变的 ACG 同好圈 X 闲聊取暖 X 自由经营公会新手村 也是一个 c-section

看出让人皱眉的点了吗?这些会影响 for迴圈抓资料的因素,同时也会影响我怎么显示层数

这就又得让 Cheerio 筛资料,决定要不要爬取、要不要为该 c-section 计数了
明明需要找出各个 Element 不同之处,而这些 HTML 根本是同工异曲,最痛苦莫过于此


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章