今天清华学姐教你用 爬虫抓动态长文并用直接生成html报告

Posted 编程界的小胖子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了今天清华学姐教你用 爬虫抓动态长文并用直接生成html报告相关的知识,希望对你有一定的参考价值。

先看看效果:

搞起来!

第一步 生成报告

没听错,爬虫先放着,无中生有,随便搞点数据先把报告生成了。

保存下面代码为report.py,后面会用这个名字引入。

from dominate.tags import *

"""
雷学委特制的生成html报告的函数
"""
def generate_html(tuples):
    _html = html()
    _head = head()
    _head.add(title("雷学委整理的CSDN热榜报告"))
    _head.add(meta(charset="utf-8"))
    _html.add(_head)
    _body = _html.add(body())
    _table = table(border=1)
    with _table.add(tbody()):
        index = 0
        for tp in tuples:
            index += 1
            leiXW = tr()
            leiXW += td(str(index))
            leiXW += td(a(tp[1],href=tp[0]))
    with _body.add(div(cls="leixuewei")):
        h3("雷学委整理的CSDN热榜")
    _body.add(_table)
    return _html.render()

"""
雷学委特制的直接生成保存报告的函数
"""
def lei_report(leixuewei_tuples, path):
    data = generate_html(leixuewei_tuples)
    with open(path, "w") as f:
        f.write(data)
       

if __name__ == "__main__":
    lxw_tuples = []
    lxw_tuples.append(("https://blog.csdn.net/geeklevin/article/details/119594295","雷学委Python生成Html报表"))
    lxw_tuples.append(("https://blog.csdn.net/geeklevin/article/details/116771659","Docker玩腻了,不妨试试用Vagrant"))
    path = "./csdn_rank.html"
    lei_report(lxw_tuples, path)
复制代码

代码解析

上的代码生成一个html网页,并保存到path变量指定路径。

  1. 准备一个二元组的数组
  2. 传入generate_html函数,这个函数构建带head和body。其中body再迭代输入的数组,生成一个表格。
  3. 将表格内容输出写入到文件中

效果如下:

第二步改造之前的爬虫代码

也就是这篇热榜长榜单爬虫截屏的文章 里面的核心代码,下面直接改造。

'''
雷学委应对流式页面的爬虫解决秘诀
截屏的核心代码:
'''
def resolve_height(driver, pageh_factor=5):
    js = "return action=document.body.scrollHeight"
    height = 0
    page_height = driver.execute_script(js)
    ref_pageh = int(page_height * pageh_factor)
    step = 150 
    max_count = 15 
    count = 0 
    while count < max_count and height < page_height:
        #scroll down to page bottom
        for i in range(height, ref_pageh, step):
            count+=1
            vh = i
            slowjs='window.scrollTo(0, {})'.format(vh)
            print('[雷学委 Demo]exec js: %s' % slowjs)
            driver.execute_script(slowjs)
            sleep(0.3)
        if i >= ref_pageh- step:
            print('[雷学委 Demo]not fully read')
            break
        height = page_height
        sleep(2)
        page_height = driver.execute_script(js)
    print("finish scroll")
    return page_height

#获取窗口实际高度
page_height = resolve_height(driver)
print("[雷学委 Demo]page height : %s"%page_height)
sleep(5)
driver.execute_script('document.documentElement.scrollTop=0')
sleep(1)
driver.save_screenshot(img_path)
page_height = driver.execute_script('return document.documentElement.scrollHeight') # 页面高度
print("get accurate height : %s" % page_height)

#上面的代码跟源自前一篇

#引用报表功能
from report import lei_report

#拉到页面底部
driver.execute_script(f'document.documentElement.scrollTop={page_height};')
sleep(1)
driver.save_screenshot(f'./leixuewei_rank_end.png')
blogs = driver.find_elements_by_xpath("//div[@class='hosetitem-title']/a")

#生成数组
articles = []
for blog in blogs:
    link = blog.get_attribute("href")
    title = blog.text
    articles.append((link,title))

print('get %s articles' % len(articles))
print('articles : %s ' % str(articles))

#给定路径,生成html报告
path = "./leixuewei_csdn_rank.html"
lei_report(articles, path)
print("保存热榜到路径:%s" %path)

"""LeiXueWei Demo代码,白嫖这么多了,关注三连支持一下吧!"""
复制代码

代码解析

前篇的流式处理的爬虫代码删去了截屏合并代码段。

然后,重点来了。如下步骤:

  1. 爬虫直接拉到底部,获取链接,生成数组
  2. 接着截图页面尾部,以后可以留作纪念
  3. 导入调用lei_report 函数,生成页面

比较简单的,不一行一行解读了。

效果如下:

报表太长了截图截了个头尾,看看。
 

本文仅作展示目的,对于演示网站有任何异议,请告知修改。

最后使用爬虫必须谨慎,不要当做儿戏去爬机构网站。你学习也不能拿严肃的网络来刷,这个行为会让你吃上LAO饭!

参考文献 

 ① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

 

以上是关于今天清华学姐教你用 爬虫抓动态长文并用直接生成html报告的主要内容,如果未能解决你的问题,请参考以下文章

清华学姐教你:Linux下查看日志用到的常用命令赶快学起来!

今天清华大佬教你用Python爬虫,爬取腾讯视频评论,机会难得还不点击进来看看

❤️学姐教你 10 道题搞定 c 语言❤️(推荐收藏)

❤️学姐教我做游戏,一做便是十四载❤️

闲来无事 做个爬虫实战吧!以某乎为实战案例,教你用Python爬取手机App数据

HTTP抓包之接口自动化测试:Fiddler如何抓包?3W字长文教你搞定!