excel网页数据抓取vba(我用脚本写一个给你啦用python网页网页书单(组图))
优采云 发布时间: 2021-09-17 21:12excel网页数据抓取vba(我用脚本写一个给你啦用python网页网页书单(组图))
这两天他去朋友家玩。他说,他最近找了一份工作,需要帮助其他人整理网上书籍,他似乎有点麻烦。我想一下。好吧,我给你写一个剧本
使用Python获取web图书列表1、并分析需求
您需要捕获网页中的特定内容,特别是
对于有限的平装书,需要书名、作者姓名、出版时间和售价。出版商从书名(如有)中引入ISBN代码
这些内容必须存在于网页中,因此我们只需要使用[regular expression]来提取所需的内容
然后,他将内容范围指定为
关键词是音乐欣赏、艺术欣赏和艺术创作
这个。。亚马逊似乎有很多参数。。。那么我不妨先在这里偷一个懒汉(怎么说,亲吻原则),然后在这里先记录他请求的网站
音乐欣赏
艺术欣赏
艺术创作
嗯,它们看起来都像
2、设计功能
我朋友的要求是把上面的数据整理成excel。对于这个函数,如果我在Internet上找到一个python封装的库,应该没有问题。为了便于使用,我们最好在这里支持交互式界面。为了方便起见,我们仍然计划把pyqt一号带出去
那么一般功能是:
3、具体实施
让我们使用Python作为一个简单的脚本。这里,我们使用请求来删除数据,但请注意,Amazon实际上有一个保护机制。如果您轻率地使用get方法进行访问,Amazon将向您返回以下内容:
1
2
3
4
然后我试着假装头部,四处走动
然后提取此页面中每本书对应的URL并观察当前页面。URL有一个特征词“a-link-normal s-access-detail-page a-text-normal”。然后,您可以使用该关键字使用正则表达式提取当前数据
因为要在HREF中间提取内容,必须首先在***中指定内容,然后使用()返回需要的内容
1
pageDetail = r'<a class="a-link-normal s-access-detail-page a-text-normal"[^>]*?href=\"([^>]*)\"[^>]*?>'
请注意,由于常规模式默认为贪婪模式,因此我们可以在***************************************************************之后添加“贪婪”?实现非贪婪模式查找
找到网页后,记录当前的网站并依次访问
然后我们需要根据需求获取内容
经过测试,可以完成所需的功能~
然后是Excel的操作。虽然我还没有见过VBA,但python已经在xlwt中编写了excel,所以下面是一个尝试:
1
2
3
4
5
6
7
8
9
10
11
12
import xlwt
# 创建 xls 文件对象
wb = xlwt.Workbook()
# 新增一个表单
sh = wb.add_sheet('A Test Sheet')
# 按位置添加数据
sh.write(0, 0, 1234.56)
sh.write(1, 0, 8888)
sh.write(2, 0, 'hello')
sh.write(2, 1, 'world')
# 保存文件
wb.save('example.xls')
我在互联网上找到了这个演示,因此估计对应关系为
|实际内容|操作对象|
|Excel文件|工作簿
|床单
|单元格内容写入
然后我们大致知道如何编写:创建一个excel并将数据放在指定的位置
----------=========------------
有一种新的需求。您需要截图网站并将其保存到当前目录。这似乎是可以实现的。然后我发现了一件麻烦的事。。。这张照片一定涉及编码问题,但我似乎无法处理。。因为URL捕获的页面大小似乎不太正确。。。它可能是多张图片或其他东西。无论如何,照片的数量是错误的。。。所以我用了其他的想法,直接在网页上取了图片,就是Base64处理过的图片。。。。虽然它可能被压缩了,但应该仍然可以。。把这个拿下来处理。应该没问题
4、特定应用
正如这位同学提到的,他也想借此机会学习,他计划写一份依赖列表,以便能够快速安装
安装pipreqs可以快速生成requirements.txt。但是,发现总是报告Unicode解码错误。人们认为这可能是由于windows的CMD编码问题,因此使用该参数强制指定编码为UTF-8:
1
pipreqs --encoding=utf-8 --use-local ./
如果另一方需要快速安装相应的库,它只需要在当前目录中使用它
pip install -r requirements.txt
命令,可以快速安装相应的从属库
后来,我记得有一个直观的界面,便于操作。。。好吧,搞砸了pyqt这个已经丢失了很长时间的简单例子:
首先,使用QT设计器创建第一个
然后使用pyuic5命令生成相应的。Py文件
1
pyuic5 -o ui_Dialog.py Dialog.ui
最后,使用另一个程序收录此内容,并使用pyqt对其进行操作。为了避免程序运行时的干扰,采用qthread进行异步处理,增加了slot函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class SpiderCrawl(QThread):
"""Lanch Spider"""
SignalFinishSpdier = pyqtSignal(bool)
def __init__(self, needs, parent=None):
super(SpiderCrawl, self).__init__(parent)
self.needs = needs
self.SignalFinishSpdier.connect(parent.spiderFinish)
def run(self):
""" it will return result of the spider
Ret: the result of spider
"""
result = amazonSpider.Spider(self.needs)
self.SignalFinishSpdier.emit(result)
class SpiderDialog(QDialog, ui_Dialog.Ui_Dialog):
...
@pyqtSlot(bool)
def spiderFinish(self, result):
""" the spider is finish"""
print("There!")
if result == True:
self.KeywordText.setText("爬虫已经完成任务")
else:
self.KeywordText.setText("你的url有问题...")
self.takeButton.setEnabled(True)
最后,为了防止手工进入错误的网站。。。在这里也可以检测到它。如果在当前网页中找不到合适的URL,也会被视为输入错误
最后,附上项目的网站:
亚马逊蜘蛛V1.0