巴哈场外休憩区C页爬虫 - 楼层内文显示
接下来是C页的内容,也是阅览器的重点,毕竟大家不是看看标题就饱了对吧?
我是先做显示文章的主楼,再加入显示主楼留言区的功能,最后再将所有楼层的显示做出来,以及换页
把 Function 当 Props 在传
这招是小哈教我的,失智列车网站也有应用,而在这个 Side Project 则是频繁用到
设定 Hook 的 State ,必定是利用 setState 函式
嗯?那如果我们把这个函式当作某个子元件的 Props ,把它传进去,然后在子元件内触发呢?
也就是说,我可以做到在子元件内判断要不要改变父元件的状态
具体是在哪些地方用到? 比如说:页面开关
ArticleBlock 有个 Props setOpen
、Set_ArticleData
就是用来放入父元件 App 设定状态所使用的 setOpenArticleBool
与 setDisplay_article
函式
当某个 ArticleBlock 被点击时,ArticleBlock 改变父元件的 OpenArticleBool
与,Display_article
假如 OpenArticleBool
为真,则在主页显示对应的文章内文(ArticleBody)
其他还有很多,包括闇黑模式也都有用到,但上方的举例都有说到重点,这边就不一一细讲
内文一把抓 - dangerouslySetInnerHTML
还记得上面闇黑模式提到的无解问题吗?
其最根本原因就是因为:巴哈瀑布流的楼层内文是直接把整段HTML原封不动抓下来显示在对应区域
办到这一点的便是「dangerouslySetInnerHTML」
用法很简单,它就像一个HTML的属性,你爬回来一整段HTML后,存成变数当作属性的值即可
替换巴哈对于媒体内容的的自订属性
当然最终结果也不是说真的原汁原味,我抓下来之后还是有做一些基本的筛选润饰
像是巴哈的连结,全部都有 data
前缀(例如 data-src
),这爬回来不就没办法正常显示了嘛?
所以我要将爬回来的内文筛出所有我需要改的 Element ,将原本的属性去掉再加上新的属性和原本的值
资料筛选反而是这 Side Project 最累人的部分
换页与层数
巴哈文章中,所有内文区域的东西,都是 class 叫作 c-section
的玩意儿
我是靠 for迴圈 去抓每一个 c-section
内的东西来拿这个楼层的内容,没有更好的方法
而这之中,关于 c-section
的排序,我观察出几个状况:
c-section
显示页码无论有没有页码,主楼下面肯定是该死的 猜你喜欢,它也是一个 c-section
当有 文章被删除 或 被嘘到摺叠,将会生成两个该楼层的 c-section
大家都在看 是一个 c-section
内容几乎没在变的 ACG 同好圈 X 闲聊取暖 X 自由经营公会新手村 也是一个 c-section
看出让人皱眉的点了吗?这些会影响 for迴圈抓资料的因素,同时也会影响我怎么显示层数
这就又得让 Cheerio 筛资料,决定要不要爬取、要不要为该 c-section
计数了
明明需要找出各个 Element 不同之处,而这些 HTML 根本是同工异曲,最痛苦莫过于此