vba 网页数据抓取(一个空Python应用程序图步骤及引入关键包图)
优采云 发布时间: 2022-03-19 00:23vba 网页数据抓取(一个空Python应用程序图步骤及引入关键包图)
在VS环境下,打开VS后点击菜单【文件】/【新建】/【项目】或在页面选择“新建项目”,如下图:
由于可以创建的项目类别比较多,而我们这里只需要创建Python应用,我们可以通过上面标注的步骤1进行筛选,然后按照步骤2在列表中选择“Python应用”,点击“下一步” ”。
在“配置新项目”中,也按照上述步骤进行设置。第二步,“位置”可以根据自己的需要进行设置。同样,步骤1中的“项目名称”也可以自己定义。
这样,我们就创建了一个空的 Python 应用程序,并且会自动创建一个 MySpider.py 文件,在“解决方案管理器”中可以看到,该文件以粗体显示,如下图:
剩下的就是将我们的程序代码添加到这个文件中。
包的介绍和介绍
上一篇爬虫开篇提到,我们的爬虫需要引入几个关键包,如下截图所示:
在“解决方案资源管理器”中双击“MySpider.py”文件,将上述信息添加到打开的文件中。
特别注意,别忘了加上第一行,这个在开头就提到了,它的作用是告诉解释器,这个文件的编码方式。
BeautifulSoup,这个模块在 bs4 包中。我们将使用它的功能是网页解析和网页数据获取。从字面上看,它是一种“美丽的汤”。
re,这就是正则表达式模块,它的全称是Regular Expression,正则在开发和实践中的应用是非常广泛的,你可能对“正则”这个名字不是很熟悉,但你也或多或少地使用了不过,对于比如我们在DOS下使用的通配符其实就是正则表达式的一种形式,还有我们在Word中使用的查找/替换功能。不知大家有没有注意到,有一个“Use wildcards”,如果勾选了这个选项,那么你要查找或替换的字符串就可以使用正则表达式了。
正则表达式是一种对字符串进行操作的逻辑公式,就是用一些预先定义好的特定字符以及这些特定字符的组合形成一个“正则字符串”,用来表达对应的字符。字符串的过滤逻辑。
如果一个人能完全理解规律,这里基本没有灵活应用的“美汤”。在本文中,这不是重点,如果您需要了解更多信息,可以在百度上搜索“正则表达式”。
urllib.request,网页请求模块,这是网页数据获取的关键,它模拟了我们人们通过浏览器访问一个网址,然后获取网页上所有信息的过程。从它的字面意思可以猜到,就是完成一个对特定URL(即页面所在的网站服务器)的请求,然后让服务器返回你需要并且可以提供的数据根据你的要求。,数据信息以html文档的形式返回。
urllib.error,这是urllib的错误处理模块。
xlwt,这个模块以后会更多的处理,是一个关于如何操作熟悉的Excel的模块。这也是网上各种python培训机构用来吸引初学者的噱头。通过python,可以完全控制excel,然后制作各种漂亮的图表。什么能让你摆脱excel,不再需要加班。数据之类的东西完全是个噱头。仔细想想就知道Excel是微软开发的一款办公软件。它提供了 Excel 的所有外部接口。您可以根据这些公共接口控制 Excel。难道你不比微软更了解 Excel 吗?只是你多了一种控制excel的方法。根据我这么多年使用excel的经验,
再多说几句,我们继续。
了解网页请求的流程
下面我们用“谷歌”浏览器来简单介绍一下我们每次访问一个网站时会发生什么(如果你使用的是其他浏览器,你也可以检查一下是否有类似谷歌浏览器的功能,如果没有,你也可以上网下载谷歌浏览器。)
打开浏览器,然后按F12键(或者Ctrl+Shift+I,或者点击网页中右键快捷菜单最后一项“勾选”),原来的网页显示页面会分成两部分,一一部分是网页展示部分(红色区域A),另一部分(绿色区域B+蓝色区域C)是我们要用来查看网页后面内容的浏览器集成工具,也是我们需要了解实现爬虫,我们首先选择“网络”页面。
第二部分分为B区和C区。B区是网页本身的源代码,但是这个源代码已经被工具结构化和调整过,方便开发者快速定位各个节点;C区记录了网页每一次在段中发生了什么,也就是我们的浏览器和网站的交互,记录了网页向网站发送了什么信息,网站有什么信息返回,等等。这些都是短信。
此时我们点击网页的“刷新”按钮或者直接在地址栏回车,也就是让网页重新加载,我们看看C区为我们记录了什么。
之后,在时间轴中,用鼠标点击最左边的时间槽,可以看到这是浏览器与网站的第一次交互信息,可以从Request URL(请求URL)中获取一般部分。您浏览器地址栏中的我们的网址信息;
请求方法是 GET;请求方法有以下6种:
从上面对各个请求方法的简单说明可以看出,并不是所有的方法你都有权限使用,通常出于安全考虑,网站一般只开放有限的请求方法,比如GET、POST、HEAD和其他可能导致安全风险的请求方法将被禁止或保留给网站后端内部使用。通常,我们主要向 GET 和 POST 发送请求。
在 Request Headers 请求头中,我们可以看到以下关键信息:
Accept:告诉网站服务器我可以接受什么信息;
Accept-Encoding:可接受的编码;
Cookie:通常用于与服务器建立多个会话的信息;
Host:初始URL中的主机;
User-Agent:浏览器类型,告诉我我使用的是什么类型的浏览器。使用这个也可以达到欺骗服务器的目的。也就是说,如果你想直接用python访问,它可能会被认为是爬虫,会被服务器拒绝,如果你替换这个属性的值,你就简单的愚弄了服务器。
其实请求头中还有很多其他类型的参数,这里就不一一说明了。如果您需要它,您可以放心地在网上找到它。我们通常使用上面列出的那些,加上一个Referer。
向服务器发送请求信息后,服务器会根据您发送的请求返回相应的信息。从下一个时隙可以看出,我们收到了很多网页元素(下图第二部分的方框)。,包括css、js和png等文件),最后组成我们在网页上看到的内容。
查看网页元素
接下来,我们可以从刚才的“网络”页面进入“元素”,查看我们最想获取的网页信息。“元素”是由该工具结构化和显示的网页的源代码信息。中间的“查看网页源代码”也可以看到,但是这种方法看到的源代码不是结构化的,看起来比较费劲。
我们仍然在这里浏览“元素”。
当我们需要查看网页的哪个部分的信息时,我们可以点击下图中的小箭头图标,然后点击网页上想要查看的内容,如:
您可以在Elements中快速定位源代码的位置,方便我们通过代码获取对应位置的信息。
其余信息也可以通过这种方式查看。
获取电影名称
接下来,我们以首先获取第一页的电影名称为例。
我们先分析一下网页的源码,找到对应的规则。我们还是点击小箭头,看看整部电影的哪一部分信息在网页的源代码中。在Elements中,可以快速定位到下图中B框的选中部分。自己观察,结合整个网页的显示也可以看到,一页有25条电影信息,都在li等标签定义的列表中,B框选中的部分是我们的第一部电影。,而在第一个列表li中,在class=”item”的div标签中,其他电影的位置在源码中也呈现出相同的结构,也就是说我们只需要获取每个item中的信息即可这个网页的信息可以进一步获取每部电影的内容。
思路确定后,开始,就可以按照步骤开始写代码了:
第一步是通过URL向网站发送相应的请求,然后我们得到网站返回的网页的源代码,也可以称为网页文件或网页数据。
每一行代码的功能基本都有注释说明,请参考。
在head字典变量中,我们也可以根据实际需要添加相应的信息,比如Referer、Host等请求字段。确保字段名称拼写正确,并且不能有多余的空格,否则 网站 服务器将无法识别。
响应变量是服务器返回的网页数据,很多情况下是经过编码的,尤其是收录汉字的网页,所以要将其变成我们可以直接读取的字符串,我们可以使用decode方法对其进行解码。
这一步之后,我们就可以启动VS的调试功能,看看我们的代码运行结果是否符合我们的预期。直接按F10键单步执行代码,然后可以看到程序从第一行开始执行,并以*敏*感*词*高亮显示,如下图:
继续按 F10 键,*敏*感*词*高亮处会跳转到下一个可执行行。当然也可以在要查看的行设置断点,在断点行按F5停止程序执行。设置断点的方法是将当前光标移动到你要设置断点的那一行,然后按F9,你会看到代码编辑区最左边会添加一个断点和一个红点会出现,如下:
我们直接跳过中间的内容,让程序直接运行到我们设置的断点行,按F5,如下图:
我们可以通过监控窗口看到响应变量的内容。
如何打开监视窗口:
然后将变量拖放到监视框中,如下所示:
01.gif
此时,程序还没有执行当前断点行。我们可以改为F10单步走线。当高亮跳转到下一行时,响应就有内容了,如下:
同样的方法,我们也可以在监控框中添加更多的变量,比如sHtml,因为此时响应已经有数据了,但是这个数据只是一个对象。添加 sHtml 后,我们可以通过 F10 单步执行我们的代码对信息进行解码以获得人类可读的内容:
对比响应,我们可以在 sHtml 的值中看到熟悉的 html 源码。下一步是解释这个源代码来分离我们需要的信息。
第二步,在得到的网页文件中(也就是刚刚得到的sHtml变量),我们可以使用“美汤”进一步分析,得到准确的内容。
ptnTitle 是我们定义的用于获取电影名称的正则表达式。sHtml文本内容由BeautifulSoup的html解析器解析,然后解析结果使用find_all方法将所有class为item的div分隔开形成一个list,通过for循环出每个list中的元素,特别注意参数中的class_=”item”,其中class后面有下划线,主要目的是表示class属性,否则会报错,因为class这个词在python语言中是保留关键字。
然后,在获取到item中的所有信息后,我们需要通过之前定义的正则表达式来精确匹配我们的电影名称。
得到片名后,还需要做一些处理,防止电影名出现一些不想要的字符串,比如名字开头和结尾多余的空格,名字中可能出现的斜线“/”。因为电影名除了中文名外可能还收录其他外文名,比如英文、日文等,所以我们需要做出判断,可以把中文名和外文名一起取出来,如果没有外文名,我们will 表示为空。
写完之后,可以再次开始调试,看看是不是我们需要的结果。同理,是否可以正常获取本页所有电影名。
通过调试我们可以看到,通过查看程序最后的dataList列表变量,我们得到了第一页所有电影的名字。
既然可以成功获取到电影名,那我就可以用同样的方法获取一个页面上所有电影的其他信息了,比如电影的详细介绍,评分,评分人数,导演等。您可以看到网页上的所有信息以及相应的信息超链接。
项目源码可通过微信扫描下方二维码关注查看历史文章,也可提前获取关注文章。