网页数据抓取怎么写(大数据深入人心的时代,让Python带我们飞(组图))
优采云 发布时间: 2022-02-06 22:11网页数据抓取怎么写(大数据深入人心的时代,让Python带我们飞(组图))
介绍
什么是爬行动物?
先看百度百科的定义:
简单地说,网络爬虫也称为网络爬虫和网络蜘蛛。它的行为一般是先“爬”到相应的网页,然后“铲”下需要的信息。
为什么要学习爬行?
看到这里,有人会问:谷歌、百度等搜索引擎已经帮我们爬取了互联网上的大部分信息,为什么还要自己写爬虫呢?这是因为需求是多种多样的。例如,在企业中,爬取的数据可以作为数据挖掘的数据源。甚至还有人为了炒股而抓取股票信息。笔者见过有人爬上绿色中介的数据,为了分析房价,自学编程。
在大数据时代,网络爬虫作为网络、存储和机器学习的交汇点,已经成为满足个性化网络数据需求的最佳实践。你还在犹豫什么?让我们开始学习吧!
语言环境
语言:人生苦短,我用Python。让 Python 飞我们吧!
urllib.request:这是Python自带的库,不需要单独安装。它的作用是打开url让我们获取html内容。官方 Python 文档简介: urllib.request 模块定义了有助于在复杂世界中打开 URL(主要是 HTTP)的函数和类——基本和摘要身份验证、重定向、cookie 等。
BeautifulSoup:是一个 Python 库,可以从 HTML 或 XML 文件中提取数据。它支持通过您最喜欢的转换器导航、查找和修改文档的惯用方式。Beautiful Soup 将为您节省数小时甚至数天的工作时间。安装比较简单:
$pip 安装 Beautifulsoup4
验证方法是进入Python,直接导入。如果没有异常,则说明安装成功!
“美味的汤,绿色的浓汤,
盛在热气腾腾的盖碗里!
这么好的汤,谁不想尝尝?
晚餐的汤,美味的汤!"
BeautifulSoup 库的名字来源于《爱丽丝梦游仙境》中的同名诗。
抓取数据
接下来,我们使用urllib.request获取html内容,然后使用BeautifulSoup提取数据,完成一个简单的爬取。
将此代码保存为 get_html.py 并运行它以查看它的输出:
果然,输出了这个网页的整个HTML代码。
无法直接看到输出代码。我们如何才能轻松找到我们想要捕获的数据?使用 Chrome 打开 URL,然后按 F12,然后按 Ctrl+Shift+C。如果我们想抓取导航栏,我们用鼠标点击任何导航栏项,浏览器在html中找到它的位置。效果如下:
目标html代码:
有了这些信息,就可以用 BeautifulSoup 提取数据。更新代码:
将此代码保存为 get_data.py 并运行它以查看它的输出:
是的,我们得到了我们想要的数据!
BeautifulSoup 提供了简单的 Pythonic 函数,用于处理导航、搜索、修改解析树等。它是一个工具箱,通过解析文档为用户提供他们需要抓取的数据。由于其简单性,无需太多代码即可编写完整的应用程序。怎么样,你以为复制粘贴就可以写爬虫了?简单的爬虫确实可以!
一个迷你爬虫
我们先定一个小目标:爬取网易云音乐播放量超过500万的播放列表。
打开播放列表的url:,然后用BeautifulSoup提取播放次数3715,结果我们什么都没提取。我们打开了一个假网页吗?
动态网页:所谓动态网页,是指相对于静态网页的一种网页编程技术。对于静态网页,随着html代码的生成,页面的内容和显示效果基本不会改变——除非你修改了页面代码。动态网页并非如此。虽然页面代码没有改变,但是显示的内容会随着时间、环境或数据库操作的结果而改变。
值得强调的是,动态网页不应与页面内容是否动态相混淆。这里所说的动态网页与网页上的各种*敏*感*词*、滚动字幕等视觉动态效果没有直接关系。动态网页也可以是纯文本内容或收录各种*敏*感*词*内容。这些只是特定于网页。内容的呈现形式,无论网页是否具有动态效果,只要是通过动态网站技术生成的,都可以称为动态网页。
现在我们明白了,这是一个动态网页,当我们拿到它的时候,还没有请求播放列表,当然,什么都提取不出来!
我们以前的技术无法执行在页面上执行各种魔术的 JavaScript 代码。如果 网站 的 HTML 页面没有运行 JavaScript,它可能看起来与您在浏览器中看到的完全不同,因为浏览器可以正确执行 JavaScript。用 Python 解决这个问题只有两种方法: 采集 内容直接来自 JavaScript 代码,或者用 Python 的第三方库运行 JavaScript,直接 采集 你在浏览器中看到的页面。我们当然选择后者。今天的第一课,不深入原理,先简单粗暴地实现我们的小目标。
Selenium:是一个强大的网络数据采集工具,最初是为网站自动化测试而开发的。近年来,它也被广泛用于获取准确的网站快照,因为它们直接在浏览器上运行。Selenium 库是在 WebDriver 上调用的 API。WebDriver 有点像可以加载网站的浏览器,但也可以像BeautifulSoup 对象一样用于查找页面元素,与页面上的元素交互(发送文本、点击等),以及执行其他操作运行 Web Crawler 的操作。安装方式与其他 Python 第三方库相同。
$pip 安装硒
验证它:
Selenium 没有自带浏览器,需要配合第三方浏览器使用。例如,如果您在 Firefox 上运行 Selenium,您会看到一个 Firefox 窗口打开,转到 网站,然后执行您在代码中设置的操作。虽然这样可以看的比较清楚,但是并不适合我们的爬虫程序。爬完一个页面再打开一个页面效率太低了,所以我们使用了一个叫做 PhantomJS 的工具来代替真正的浏览器。
PhantomJS:是一个“无头”浏览器。它将 网站 加载到内存中并在页面上执行 JavaScript,但它不会向用户显示页面的图形界面。结合 Selenium 和 PhantomJS,您可以运行一个非常强大的网络爬虫,它可以处理 cookie、JavaScript、标头以及您需要做的任何其他事情。
PhantomJS 不是 Python 的第三方库,不能使用 pip 安装。它是一个成熟的浏览器,所以你需要去它的官方网站下载,然后将可执行文件复制到Python安装目录的Scripts文件夹中,像这样:
开始工作吧!
打开播放列表的第一页:
先用Chrome的“开发者工具”F12分析一下,很容易看穿一切。
播放号nb(号播):29915
Cover msk(掩码):带有标题和网址
同样可以找到“下一页”的url,最后一页的url为“javascript:void(0)”。
最后,我们可以用 18 行代码完成我们的工作。
将此代码保存为 get_data.py 并运行它。运行后会在程序目录下生成一个playlist.csv文件。