Это 23-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления
Школьный комитет ранее написал статьюСтатья со скриншотом горячего списка и сканера длинных списковиБыстрая и элегантная разработка 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-страницу и сохраняет ее по пути, указанному переменной пути.
- Подготовьте массив из двух кортежей
- Передайте функцию generate_html, эта функция строится с головой и телом. Затем тело выполняет итерацию по входному массиву для создания таблицы.
- Записать вывод содержимого таблицы в файл
Эффект следующий:
Второй шаг — преобразовать код сканера перед
что этоСтатья со скриншотом горячего списка и сканера длинных списковОсновной код внутри непосредственно преобразован ниже.
'''
雷学委应对流式页面的爬虫解决秘诀
截屏的核心代码:
'''
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代码,白嫖这么多了,关注三连支持一下吧!"""
Разбор кода
Код сканера для потоковой обработки в предыдущей статье удалил снимок экрана и объединил сегмент кода.
Затем наступает момент. Выполните следующие действия:
- Сканер тянет прямо вниз, получает ссылку и генерирует массив
- Затем сделайте скриншот конца страницы, вы можете оставить его себе на память позже.
- Импортируйте и вызовите функцию lei_report для создания страницы.
Он относительно прост и не интерпретируется построчно.
Эффект следующий:
Отчет слишком длинный, скриншот обрезан, посмотрите.
Резюме: см. больше об этом
Эта статья предназначена только для демонстрационных целей. Если у вас есть какие-либо возражения против демо-сайта, пожалуйста, сообщите мне об изменении.
Наконец, вы должны быть осторожны при использовании сканеров и не использовать их как детскую игру для сканирования веб-сайтов учреждений. Вы не можете использовать серьезный Интернет, чтобы очистить свои исследования, такое поведение заставит вас есть рис LAO!
Кстати, академический комитет тоже имеет это, чтобы сосредоточиться на долгосрочном чтении =>Подборка интересных историй о программировании от Лэй Сюэвэя
или =>Лэй Сюевэй Серия NodeJS
Непрерывное обучение и постоянное развитие, я Лей Академический комитет!
Программирование — это весело, и ключ в том, чтобы досконально понять технологию.
Это не легко создать, пожалуйста, поддержите много, лайкните и соберите, чтобы поддержать академический комитет!