【从零开始的python生活②】力扣爬虫改进方法(1)

简介: 【从零开始的python生活②】力扣爬虫改进方法(1)

☘前言☘

读完这篇博客,你可以学到什么?


excel的读取和写入方式

获取接口的方式

多线程提高爬虫效率

云端服务器部署web服务实时更新



这篇博客里,我将在上一篇文章的基础上进一步来发掘网站接口api提高访问速度,进一步多线程发掘更快的速度,最后部署到web服务器来实现实时更新排行榜的访问。

没有读过上一篇文章没有基础的同学可以先看一下之前的文章【从零开始的python生活①】手撕爬虫扒一扒力扣的用户刷题数据


全文大约阅读时间: 20min


🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人

✨联系方式:2201891280(QQ)


主要内容

☘前言☘

一、改进原因

🚨1.时间效率

2.资源占用

二、接口的获取

1.找到查询信息

2.确定传入参数

2.1确定头部信息

2.2确定传输参数

三、数据的读入与查询写回

1.数据读入查询

2.数据的写回

四、多线程请求信息

五、web前端的书写

1.默认的生成结果:

2.改变为整行的颜色显示

3.完善样式表

六、其他补充

1.CSRF的获取

2.web服务器直接写入静态页面地址

3.电脑端的呈现页面

4.数据的定时更新

七、写在最后

一、改进原因

上一篇的文章代码改进(主要是使用无头模式,不显示画面来提高速度):


ch_options = webdriver.ChromeOptions()
# 为Chrome配置无头模式
ch_options.add_argument("--headless")
ch_options.add_argument('--no-sandbox')
ch_options.add_argument('--disable-gpu')
ch_options.add_argument('--disable-dev-shm-usage')
ch_options.add_argument('log-level=3')
ch_options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])
ch_options.add_experimental_option('useAutomationExtension', False)
ch_options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=ch_options)
driver.implicitly_wait(10)


🚨1.时间效率

下图是我在树莓派4B上运行的时间截图。900s,这在服务器上是不可接受的


2.资源占用


这是我电脑运行时的资源占用,如果服务器运行的话直接炸裂。。。可能会导致我本身的web服务停止反应。

二、接口的获取

1.找到查询信息

首先访问自己的主页并按f12进入开发者工具

按ctrl+f查找自己的刷题数目

可以成功找到对应的关键字为acTotal并且对应的请求就是看标头。


2.确定传入参数

2.1确定头部信息

可以发现标头的地址就是https://leetcode-cn.com/graphql/,那我们虎一点直接post一下看看反馈。上图告诉我们我没没有给他CSRF校验。


我们正常的请求参数是在这里,其实就是在头部。一般这种网站还需要申请网站信息,所以我们可以将对应的头部信息传给它。

现在我们就成功给到了标头,提示我们传参错误,我们压根没传参,233


2.2确定传输参数

查看payload可以发现主要的传输数据 我们把它拷贝出来作为数据传给对应的网址:


错误信息告诉我variables不符合要求,啊这???其实是需要把variables的值变成字符串:


嗯,这就拿到了我们需要的数据,但是这也太复杂了,可以发现查询结果全靠query字段。我们对它进行一些精简:

在不破坏层级的条件下精简到了极致,返回信息只有我们想要的数据了

我们再修改一下返回数据的值就完美了。


为了方便,我们把根据名字查询信息封装成函数并做验证

三、数据的读入与查询写回

1.数据读入查询

其实上一次已经完成了相关数据的读入,但是这一次我们只需要用户的名称。所以我们有一点改变。我们读入数据,如果不符合要求直接输出0

符合要求的我们需要从其中找到用户名,分析链接发现/u/{用户名}/,所以我们可以用正则表达式提取出对应的用户名

此时已经可以输出对应的数据了


2.数据的写回

一开始为了复制回腾讯文档我直接使用了txt作为输出,很简单:




可以发现在这种情况下,cpu负载极低,速度也有极大的提升,但是我们知道requests是访问网络资源,限制时间的主要问题在于网络等待,所以我们更希望用多线程并发请求来达到提高程序速度的要求。


相关文章
|
11天前
|
数据采集 存储 XML
Python爬虫定义入门知识
Python爬虫是用于自动化抓取互联网数据的程序。其基本概念包括爬虫、请求、响应和解析。常用库有Requests、BeautifulSoup、Scrapy和Selenium。工作流程包括发送请求、接收响应、解析数据和存储数据。注意事项包括遵守Robots协议、避免过度请求、处理异常和确保数据合法性。Python爬虫强大而灵活,但使用时需遵守法律法规。
|
12天前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
13天前
|
数据采集 Web App开发 监控
高效爬取B站评论:Python爬虫的最佳实践
高效爬取B站评论:Python爬虫的最佳实践
|
20天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
63 6
WK
|
24天前
|
Python
Python中format_map()方法
在Python中,`format_map()`方法用于使用字典格式化字符串。它接受一个字典作为参数,用字典中的键值对替换字符串中的占位符。此方法适用于从字典动态获取值的场景,尤其在处理大量替换值时更为清晰和方便。
WK
69 36
|
14天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
19天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
38 7
|
21天前
|
数据采集 Web App开发 前端开发
Python爬虫进阶:Selenium在动态网页抓取中的实战
【10月更文挑战第26天】动态网页抓取是网络爬虫的难点,因为数据通常通过JavaScript异步加载。Selenium通过模拟浏览器行为,可以加载和执行JavaScript,从而获取动态网页的完整内容。本文通过实战案例,介绍如何使用Selenium在Python中抓取动态网页。首先安装Selenium库和浏览器驱动,然后通过示例代码展示如何抓取英国国家美术馆的图片信息。
44 6
|
18天前
|
数据采集 Web App开发 JavaScript
爬虫策略规避:Python爬虫的浏览器自动化
爬虫策略规避:Python爬虫的浏览器自动化
|
18天前
|
数据采集 存储 XML
Python实现网络爬虫自动化:从基础到实践
本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。
109 1
下一篇
无影云桌面