在大数据时代,数据采集成为了数据分析和市场研究的重要环节。为了帮助用户高效地收集咸鱼平台上的商品数据,我们开发了一个名为“咸鱼采集器”的桌面应用程序。本文将详细介绍如何使用Python和PyQt5来实现这一工具,并展示其主要功能和使用方法。
开发背景
咸鱼作为中国领先的二手交易平台,拥有海量的商品数据。对于研究人员和商家来说,能够从小红书平台采集特定商品的数据,对于市场分析、商品定价和用户行为研究等方面具有重要价值。因此,我们开发了咸鱼采集器,旨在提供一个简单易用的数据采集解决方案。
技术选型
咸鱼采集器主要基于以下技术构建:
- Python:一种广泛使用的高级编程语言,以其清晰的语法和强大的库支持而闻名。
- PyQt5:一个创建桌面应用程序的Python绑定库,提供了Qt库的丰富功能,使得开发跨平台的GUI应用程序变得简单。
- pandas:一个强大的数据分析库,用于数据处理和导出。
- DrissionPage:一个Python库,用于自动化网页操作,模拟浏览器行为。
功能介绍
咸鱼采集器具备以下核心功能:
- 用户登录:用户可以在应用程序中登录咸鱼账户,以便采集更多的商品数据。
- 关键词搜索:用户可以输入一个关键词,采集器将搜索与该关键词相关的商品。
- 数据采集:采集器将自动浏览搜索结果,收集商品的详细信息,包括用户昵称、商品标题、位置、价格、发布时间、链接、描述、芝麻信用等级和分数。
- 数据展示:采集到的数据将在应用程序的表格中实时展示,方便用户查看。
- 数据导出:用户可以将采集到的数据导出为Excel文件,方便后续的数据分析。
关键代码实现
下面,我将展示实现这些功能的关键代码。
GUI布局
使用PyQt5的QGridLayout
来布局用户界面,包括输入框、按钮和表格。
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.data_list = [] # 用于存储采集的数据
def initUI(self):
layout = QGridLayout()
# 商品关键词输入框
self.keyword_label = QLabel('商品关键词:', self)
layout.addWidget(self.keyword_label, 0, 0)
self.keyword_input = QLineEdit(self)
self.keyword_input.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
layout.addWidget(self.keyword_input, 0, 1, 1, 2)
# 更多布局代码...
数据采集
使用DrissionPage
库来模拟浏览器行为,采集咸鱼平台上的商品数据。
def handle_collect(self):
keyword = self.keyword_input.text()
quantity_number = self.quantity_input.text()
if keyword and quantity_number:
quantity_number = int(quantity_number)
self.log_message(f'开始采集关键词: {keyword}')
total = 0
page.listen.start('https://h5api.m.goofish.com/h5/mtop.taobao.idlemtopsearch.pc.search/1.0/')
page.get(f'https://www.goofish.com/search?q={keyword}')
while total < quantity_number:
res = page.listen.wait(timeout=10)
data = res.response.body
resultList = data['data']['resultList']
for item in resultList:
# 数据处理和表格更新代码...
total += 1
if total >= quantity_number:
break
# 翻页逻辑...
self.log_message('采集完成!')
else:
self.log_message('商品关键词为空!请输入商品关键词!')
数据导出
使用pandas
库将采集到的数据导出为Excel文件。
def handle_export(self):
keyword = self.keyword_input.text()
if not keyword:
self.log_message('请输入商品关键词以导出数据。')
return
today = datetime.now()
filename = f"{today.strftime('%Y%m%d')}-{keyword}.xlsx"
df = pd.DataFrame(self.data_list)
try:
df.to_excel(filename, index=False)
QMessageBox.information(self, '导出成功', f'数据已导出到 {filename}')
self.data_list.clear()
self.table_widget.clearContents()
except Exception as e:
QMessageBox.critical(self, '导出失败', f'导出数据时发生错误: {e}')
程序界面:
需要完整源码有偿可私信: