10k

A tool - web page processing

背景

起因是某个刷题网站上有一份前四百题的分类顺序表,结果发现Chrome和Safari的插件都不能生成PDF文档完美的提取并显示这个列表。查看源代码发现好像符合一些规律,所以就想着用python自己写个小工具整理一下。

具体实现

基本分三步,1. 获取源码, 2. 文本处理, 3. 获取结果。 一步步说一下。

Step1 获取源码 可以选择用小爬虫爬取这个网页的源码,在爬取的时候就可以做一些过滤操作,获取相应的标签。因为我这个就很少量,本着省时省力的原则,我只接选择去原网页查看源代码。

Step2 文本处理 主要是对获取到的文本进一步处理,找到自己需要的信息并且观察。

<tr>
    <td>380</td>
    <td><a href="https://leetcode.com/problems/insert-delete-getrandom-o1/"
           target="_blank" class="text-link">Insert Delete GetRandom O(1)</a></td>
    <td><a href="/login" class="text-link">视频讲解</a></td>
    <td></td>
</tr>

观察过后发现其实都是这个模式,所以上手!beautiful soup了解一下。 使用了beautiful soup的节点操作工具。这里涉及到DOM的知识(其实不懂也没事,只需要知道一个HTML页面是一个类似树形结构的文本组织)。 找到<tr>标签然后使用get_text()函数获取到他内部的文本。

Step3 获取结果 我只需要得到最后的列表即可,因为我要放在Markdown文件里给他加上一个Todo List标签,所以做了小小的处理。

最后记录一下源代码,因为篇幅有限,网页源代码将近一万行了,所以只截取几行代表直观感受一下。

from bs4 import BeautifulSoup


html_doc = """
<tr>
    <td>78</td>
    <td><a href="https://leetcode.com/problems/subsets/description/"
           target="_blank" class="text-link">Subsets</a></td>
    <td><a href="/login" class="text-link">视频讲解</a></td>
    <td></td>
</tr>
<tr>
    <td>79</td>
    <td><a href="https://leetcode.com/problems/word-search/description/"
           target="_blank" class="text-link">Word Search</a></td>
    <td><a href="/login" class="text-link">视频讲解</a></td>
    <td></td>
</tr>
<tr>
    <td>80</td>
    <td><a href="https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/description/"
           target="_blank" class="text-link">Remove Duplicates from Sorted Array II</a></td>
    <td><a href="/login" class="text-link">视频讲解</a></td>
    <td></td>
</tr>
"""

soup = BeautifulSoup(html_doc, 'html.parser') // parse source code of web page
for tr in soup.find_all('tr'): // find_all the tr label
    text = tr.get_text()
    l = text.split('\n') // split by new line 
    new_s = "- [ ] " + l[1] + " " + l[2] + " " + l[4] // get what I want,  
    if (l[1][0] > '0' and l[1][0] < '9'): // filtering some invalid result
        print(new_s)

我得到的结果:

1

复制进去markdown编辑器:

2

后记

多动手来增加自己思考的机会和写代码的能力把。

Thoughts? Leave a comment