使用PyQt5一键傻瓜式的数据采集工具(一)_
优采云 发布时间: 2021-08-07 03:11
使用PyQt5一键傻瓜式的数据采集工具(一)_
<p style="margin-right: 0.5em;margin-left: 0.5em;letter-spacing: 0.544px;color: rgb(0, 0, 0);font-size: medium;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;text-align: center;">↑ 关注 + 星标 ,每天学Python新技能</p>
后台回复【大礼包】送你Python自学大礼包<p style="padding-right: 0.5em;padding-left: 0.5em;">
</p>
Data采集越来越成为互联网从业者的刚性需求。
从内部报告到外部市场动态,需要采集大大小小的信息和数据。爬虫无疑是常规数据采集最快最有效的方法。但是,要写爬虫,必须有一定的编程基础,谁受得了。市面上也有一些自助数据采集工具,比如优采云、优采云等,确实降低了数据采集和门槛,方便了数据采集的操作。但是,这些工具或多或少仍需要人为地定义和选择。在周老师的“前爬虫生涯”中,我遇到了很多生意人,也只是一个需求:你给我数据。答案是否定的,然后他说:给我一个工具,让我点击数据,它就会出来。其实我们可以用PyQt5对爬虫程序进行封装打包实现傻瓜式,一键采集软件。这个特别适合网站,是普通业务人员,实时数据不高但需要登录。 下面我们以采集微信公号后台的数据为例介绍PyQt5的使用开发一键傻瓜式data采集工具。核心采集代码在这里,我们只是以采集微信公号后端的“账户全局”数据为例:
我们对 HTTP 请求使用 requests 库,对 HTML 文档解析和数据提取使用 BeautifulSoup。核心采集代码如下:
<p> def check_status(self):
try:
print("获取到的Cookie:", self.cookie)
print("获取到的Token:",self.token)
# 获取当前登录店铺和用户名
url = 'https://mp.weixin.qq.com/cgi-bin/home?t=home/index&token={token}&lang=zh_CN'.format(token=self.token)
wbdata = requests.get(url, headers=self.header, cookies=self.cookie).text
soup = BeautifulSoup(wbdata,'lxml')
nickname = soup.select_one("a.weui-desktop-account__nickname").get_text()
total_cnt = soup.select("em.weui-desktop-data-overview__desc")[2].get_text()
self.nickname = nickname
except Exception as e:
self.nickname = None
logger.error("获取用户信息出错:{}".format(repr(e)))
return (self.nickname, self.cookie)</p>
搭建图形界面由于微信公众号需要登录才能使用,我们使用PyQt5的QtWebEngineWidgets小部件在程序中嵌入浏览器,直接在程序中实现登录操作。
如您所见,我们的图形程序的主界面分为两个选项卡,由 QTabWidget 选项卡组件实现。在第一个选项卡上,我们放置了一个 QtWebEngineWidgets 的 QWebEngineView 小部件,用于显示网页和执行登录操作。在第二个标签中,我们放置了按钮部件和文本输入框部件,用于控制数据采集的进度和结果,显示数据采集。
采集Process and control 程序的图形界面搭建完成后,我们需要处理程序的功能。这些功能包括:网页的cookie是我们获取登录状态的关键。在这里,浏览器配置文件是通过 QtWebEngineWidgets 的 QWebEngineProfile 组件实现的。 QWebEngineProfile 有一个cookie 存储,每次请求都会将cookie 写入QWebEngineProfile,我们会从中读取最新的cookie。 采集通过按钮“查看登录状态”执行数据,将按钮的点击信号绑定到一个槽函数,槽函数调用QThread在子线程中执行data采集的核心代码。而结果的输出,我们通过文本输出框来实现。
<p> # 在控制台中写入信息
def outputWritten(self, text=None):
cursor = self.label_1.textCursor()
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(text)
self.label_1.setTextCursor(cursor)
self.label_1.ensureCursorVisible()</p>
这样,在按钮的slot函数中,调用outputWritten方法在文本框中输出采集信息。最终的结果,我们实现的效果是:打开程序,扫描“登录页面”选项卡上的二维码,登录微信公众号后台;然后切换到“操作页面”,点击“查看登录状态”按钮,程序会自动采集Data,最后输出到文本输入框。未登录时的效果:
登录状态下的效果:
按照同样的逻辑,我们可以实现采集网页中的其他数据,比如文章list数据、watchlist用户数据等,或者其他网站数据。
<p style="margin-top: 1.5em;margin-bottom: 1.5em;color: inherit;letter-spacing: 0px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;line-height: inherit;">如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!
Python自学超级硬核资料
最后送大家一份Python学习大礼包,从Python基础,爬虫,数据分析Web开发等全套资料,吃透资料,你可以扔掉其他资料,这些资料都是视频,学起来非常友好
Ps:都是视频学习资料,非常<strong style="font-size: 14px;">适合基础不好或者零基础的同学</strong>
推荐阅读</p>
看完记得关注@Python绿色频道
及时观看更多好文章
↓↓↓
点击卡片关注Python绿色通道
Re:大礼包,获取最新Python学习资料