信阳网站建设费用,wordpress+行间距插件,花店网站建设文案,企业网站开发是什么来自公众号#xff1a;优达学城Udacity作者#xff1a;Kerry Parker编译#xff1a;欧剃作为数据科学家的第一个任务#xff0c;就是做网页爬取。那时候#xff0c;我对使用代码从网站上获取数据这项技术完全一无所知#xff0c;它偏偏又是最有逻辑性并且最容易获得的数据… 来自公众号优达学城Udacity作者Kerry Parker编译欧剃作为数据科学家的第一个任务就是做网页爬取。那时候我对使用代码从网站上获取数据这项技术完全一无所知它偏偏又是最有逻辑性并且最容易获得的数据来源。在几次尝试之后网页爬取对我来说就几乎是种本能行为了。如今它更成为了我几乎每天都要用到的少数几个技术之一。在今天的文章中我将会用几个简单的例子向大家展示如何爬取一个网站——比如从 Fast Track 上获取 2018 年 100 强企业的信息。用脚本将获取信息的过程自动化不但能节省手动整理的时间还能将所有企业数据整理在一个结构化的文件里方便进一步分析查询。太长不看版如果你只是想要一个最基本的 Python 爬虫程序的示例代码本文中所用到的全部代码都放在 GitHub (https://github.com/kaparker/tutorials/blob/master/pythonscraper/websitescrapefasttrack.py)欢迎自取。准备工作每一次打算用 Python 搞点什么的时候你问的第一个问题应该是“我需要用到什么库”。网页爬取方面有好几个不同的库可以用包括Beautiful SoupRequestsScrapySelenium今天我们打算用 Beautiful Soup 库。你只需要用 pip(Python包管理工具)就能很方便地将它装到电脑上安装完毕之后我们就可以开始啦检查网页为了明确要抓取网页中的什么元素你需要先检查一下网页的结构。以 Tech Track 100强企业(https://link.zhihu.com/?targethttp%3A//www.fasttrack.co.uk/league-tables/tech-track-100/league-table/) 这个页面为例你在表格上点右键选择“检查”。在弹出的“开发者工具”中我们就能看到页面中的每个元素以及其中包含的内容。右键点击你想要查看的网页元素选择“检查”就能看到具体的 HTML 元素内容既然数据都保存在表格里那么只需要简单的几行代码就能直接获取到完整信息。如果你希望自己练习爬网页内容这就是一个挺不错的范例。但请记住实际情况往往不会这么简单。这个例子里所有的100个结果都包含在同一个页面中还被 标签分隔成行。但实际抓取过程中许多数据往往分布在多个不同的页面上你需要调整每页显示的结果总数或者遍历所有的页面才能抓取到完整的数据。在表格页面上你可以看到一个包含了所有100条数据的表格右键点击它选择“检查”你就能很容易地看到这个 HTML 表格的结构。包含内容的表格本体是在这样的标签里每一行都是在一个 标签里也就是我们不需要太复杂的代码只需要一个循环就能读取到所有的表格数据并保存到文件里。附注你还可以通过检查当前页面是否发送了 HTTP GET 请求并获取这个请求的返回值来获取显示在页面上的信息。因为 HTTP GET 请求经常能返回已经结构化的数据比如 JSON 或者 XML 格式的数据方便后续处理。你可以在开发者工具里点击 Network 分类(有必要的话可以仅查看其中的 XHR 标签的内容)。这时你可以刷新一下页面于是所有在页面上载入的请求和返回的内容都会在 Network 中列出。此外你还可以用某种 REST 客户端(比如 Insomnia)来发起请求并输出返回值。刷新页面后Network 标签页的内容更新了用 Beautiful Soup 库处理网页的 HTML 内容在熟悉了网页的结构了解了需要抓取的内容之后我们终于要拿起代码开工啦首先要做的是导入代码中需要用到的各种模块。上面我们已经提到过 BeautifulSoup这个模块可以帮我们处理 HTML 结构。接下来要导入的模块还有 urllib它负责连接到目标地址并获取网页内容。最后我们需要能把数据写入 CSV 文件保存在本地硬盘上的功能所以我们要导入 csv库。当然这不是唯一的选择如果你想要把数据保存成 json 文件那相应的就需要导入 json 库。下一步我们需要准备好需要爬取的目标网址。正如上面讨论过的这个网页上已经包含了所有我们需要的内容所以我们只需要把完整的网址复制下来赋值给变量就行了接下来我们就可以用 urllib 连上这个URL把内容保存在 page 变量里然后用 BeautifulSoup 来处理页面把处理结果存在 soup 变量里这时候你可以试着把 soup 变量打印出来看看里面已经处理过的 html 数据长什么样如果变量内容是空的或者返回了什么错误信息则说明可能没有正确获取到网页数据。你也许需要用一些错误捕获代码配合 urllib.error (https://docs.python.org/3/library/urllib.error.html)模块来发现可能存在的问题。查找 HTML 元素既然所有的内容都在表格里( 标签)我们可以在 soup 对象里搜索需要的表格然后再用 find_all 方法遍历表格中的每一行数据。如果你试着打印出所有的行那应该会有 101 行 —— 100 行内容加上一行表头。看看打印出来的内容如果没问题的话我们就可以用一个循环来获取所有数据啦。如果你打印出 soup 对象的前 2 行你可以看到每一行的结构是这样的可以看到表格中总共有 8 列分别是 Rank(排名)、Company(公司)、Location(地址)、Year End(财年结束)、Annual Sales Rise(年度销售增长)、Latest Sales(本年度销售额)、Staff(员工数)和 Comments(备注)。这些都是我们所需要的数据。这样的结构在整个网页中都保持一致(不过在其他网站上可能就没这么简单了)所以我们可以再次使用 find_all 方法通过搜索 元素逐行提取出数据存储在变量中方便之后写入 csv 或 json 文件。循环遍历所有的元素并存储在变量中在 Python 里如果要处理大量数据还需要写入文件那列表对象是很有用的。我们可以先声明一个空列表填入最初的表头(方便以后CSV文件使用)而之后的数据只需要调用列表对象的 append 方法即可。这样就将打印出我们刚刚加到列表对象 rows 中的第一行表头。你可能会注意到我输入的表头中比网页上的表格多写了几个列名比如 Webpage(网页)和 Description(描述)请仔细看看上面打印出的 soup 变量数据——第二行第二列的数据里可不只有公司名字还有公司的网址和简单描述。所以我们需要这些额外的列来存储这些数据。下一步我们遍历所有100行数据提取内容并保存到列表中。循环读取数据的方法因为数据的第一行是 html 表格的表头所以我们可以跳过不用读取它。因为表头用的是 标签没有用 标签所以我们只要简单地查询 标签内的数据并且抛弃空值即可。接着我们将 data 的内容读取出来赋值到变量中如上面的代码所示我们按顺序将 8 个列里的内容存储到 8 个变量中。当然有些数据的内容还需有额外的清理去除多余的字符导出所需的数据。数据清理如果我们打印出 company 变量的内容就能发现它不但包含了公司名称还包括和描述。如果我们打印出 sales 变量的内容就能发现它还包括一些备注符号等需要清除的字符。我们希望把 company 变量的内容分割成公司名称和描述两部分。这用几行代码就能搞定。再看看对应的 html 代码你会发现这个单元格里还有一个 元素这个元素里只有公司名称。另外还有一个 链接元素包含一个指向该公司详情页面的链接。我们一会也会用到它为了区分公司名称和描述两个字段我们再用 find 方法把 元素里的内容读取出来然后删掉或替换 company 变量中的对应内容这样变量里就只会留下描述了。要删除 sales 变量中的多余字符我们用一次 strip 方法即可。最后我们要保存的是公司网站的链接。就像上面说的第二列中有一个指向该公司详情页面的链接。每一个公司的详情页都有一个表格大部分情况下表格里都有一个公司网站的链接。检查公司详情页里表格中的链接为了抓取每个表格中的网址并保存到变量里我们需要执行以下几个步骤在最初的 fast track 网页上找到需要访问的公司详情页的链接。发起一个对公司详情页链接的请求用 Beautifulsoup 处理一下获得的 html 数据找到需要的链接元素正如上面的截图那样看过几个公司详情页之后你就会发现公司的网址基本上就在表格的最后一行。所以我们可以在表格的最后一行里找 元素。同样有可能出现最后一行没有链接的情况。所以我们增加了 try... except 语句如果没有发现网址则将变量设置成 None。当我们把所有需要的数据都存在变量中的以后(还在循环体内部)我们可以把所有变量整合成一个列表再把这个列表 append 到上面我们初始化的 rows 对象的末尾。上面代码的最后我们在结束循环体之后打印了一下 rows 的内容这样你可以在把数据写入文件前再检查一下。写入外部文件最后我们把上面获取的数据写入外部文件方便之后的分析处理。在 Python 里我们只需要简单的几行代码就可以把列表对象保存成文件。最后我们来运行一下这个 python 代码如果一切顺利你就会发现一个包含了 100 行数据的 csv 文件出现在了目录中你可以很容易地用 python 读取和处理它。总结这篇简单的 Python 教程中我们一共采取了下面几个步骤来爬取网页内容连接并获取一个网页的内容用 BeautifulSoup 处理获得的 html 数据在 soup 对象里循环搜索需要的 html 元素进行简单的数据清理把数据写入 csv 文件中如果有什么没说清楚的欢迎大家在下面留言我会尽可能给大家解答的附 本文全部代码(https://github.com/kaparker/tutorials/blob/master/pythonscraper/websitescrapefasttrack.py)祝你的爬虫之旅有一个美好的开始编译来源 towardsdatascience.com●输入m获取文章目录推荐↓↓↓人工智能与大数据技术