爬虫和数据分析初体验

爬虫和数据分析初体验

      • 为什么要抓取网络?
      • Web 抓取的过程
      • 准备环节
      • 实操环节

我们要了解一个东西,要知道为什么做,而不是因为别人做而做。

为什么要抓取网络?

我们来看一下Web抓取有什么用。为什么这么多人趋之若鹜。基本问题是为什么我要抓取网络。当然是因为有利可图,无利谁肯早起,对不对?Web抓取有什么好处呢处?我将以一个Web抓取的业务模型来作为例子,每个Web页上面有大量的数据。在所有这些Web网页中,Google已经识别出超过100万亿页,并且每天还在不停的新增。这是大量,不,应该说是海量的数据。如果有API,通常这是最佳的选择。如果没有,Web抓取可能是唯一获得这些数据的方法。如果你有一定的想象力和网络抓取的技能,你的潜力很大。公司一直在寻找雇用具有Web抓取知识的开发人员。当然现在也有越来越多的公司在为web抓取得到更多的法律合法性。当然这是后话。我希望您了解如何将Web抓取作为提高收益的关键。举个例子,你可以使用业务模型。几乎每个公司都有一个大问题。如何吸引和留住顶尖人才。公司通常雇用了他们甚至不了解的人才。你有一个有趣的主意。如果他们可以抓取链接以发现公司员工的技能相关数据?毕竟,大多数专业人员在个人资料中都有详细的链接。而且由于数据是自我维护的,因此通常比公司的HR数据库要好。人才分析是洞察劳动力和加薪的新术语。你可以通过使用机器学习来预测谁可能有离开公司的风险,从而使这一步骤更进一步。总体而言,这是一个不错的业务模型。获取有关员工技能的准确数据并防止员工流失,某家做同样业务的公司收入将近900万美元,员工才不到一百人。这是一个多么有利可图的业务呀。当然你可以做更多的事情。

Web 抓取的过程

你其实可以把web抓取想象成自动浏览。它的工作方式类似于使用Web浏览器的人,而无需人工干预。让我们比较一个使用Web浏览器和网络爬虫。

可爱的你 网络爬虫
键入一个网址,或者使用书签 设置一个起始的URL
下载HTML 下载HTML
解析HTML 并且渲染 解析HTML
浏览有用信息 抽取有用信息
解析 转换或者统计数据
记住信息 保存数据
点击另一个URL 使用下一个URL

你可能已经了解http。如果不了解的话,推荐一下我的专栏 全解网络协议,我的专栏详细讲解了各个协议,当然包括HTTP。尽管如此,简短的回顾对于避免Web抓取问题至关重要。我还是大概讲一下。浏览器会自动处理http的详细信息。但是,Web抓取工具必须管理细节并正确处理。 Web和http在处理消息上,有两种类型。请求消息和响应消息。假设你启动了浏览器并输入了URL。浏览器将请求发送到服务器。然后,服务器决定要做什么,并且即使在单个Web页面内,也要返回响应。此过程可能会重复很多次,每个图或JavaScript下载都需要独立的请求。作为响应,http是超文本传输协议的缩写。这个名称听起来像HTML,但它们却大不相同。 Http用于从服务器检索HTML的消息。你还会看到https,因为S是安全的意思。完全一样。只是经过加密以提高安全性。什么是Http请求。请求总是有一个网址或URL和Verb动词。另外,通常还有其他信息。像User Agent。那什么是Verb呢?如果我说Get, post你可能就不会感到陌生。User Agent是可选的,他会告诉你,这是浏览器还是爬虫,它对我们人来说可能没有什么有用的信息,但是对于服务器来说,它的信息实在是太宝贵了。

准备环节

下面的实例会使用以下几个Library。

  • Requests 是python的一个Http的库。
  • Pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。
  • BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库,简单来说,它能将HTML的标签文件解析成树形结构,然后方便地获取到指定标签的对应属性。

实操环节

使用的python是3.8.4。
以下案例是在JupyterLab中跑的。
建议运行以下案列之前,建立一个虚拟的环境。
我们这个实例是通过抓取Tesla的wiki页,获取到Tesla的board of directors都有谁

  1. 引入库
import requests
from bs4 import BeautifulSoup
import pandas as pd
  1. 下载并保存要爬的页面
start_url = 'https://en.wikipedia.org/wiki/Tesla,_Inc.'
downloaded_html = requests.get(start_url)
soup = BeautifulSoup(downloaded_html.text)
with open('downloaded.html','w', encoding='utf-8') as file:
    file.write(soup.prettify())
  1. 下载你的本地应该有了一个downloaded.html的文件
  2. 查看要找的内容
full_table = soup.select('table.wikitable tbody')[0]
print(full_table)

5.内容太多就不展示了,我们现在要更精准的查找

table_head = full_table.select('tr th')

table_columns = []
for element in table_head:
    column_label = element.get_text(separator=" ", strip=True)
    table_columns.append(column_label)
    print(column_label)

print('-----------')
print(table_columns)

输出的结果如下

Joined
Name
Titles
Independent
Notes
-----------
['Joined', 'Name', 'Titles', 'Independent', 'Notes']

6.整理table_columns

import re
regex = re.compile('_\[\w\]')

table_columns = []
for element in table_head:
    column_label = element.get_text(separator=" ", strip=True)
    column_label = column_label.replace(' ', '_')
    column_label = regex.sub('', column_label)
    table_columns.append(column_label)
print(table_columns)

7.抽取表格内容


table_rows = full_table.select('tr')

table_data = []
for index, element in enumerate(table_rows):
    if index > 0:
        row_list = []
        values = element.select('td')
        for value in values:
            row_list.append(value.text)
        table_data.append(row_list)

print(table_data)

8.使用panada来展示数据

df = pd.DataFrame(table_data, columns=table_columns) 
df

9.最后的结果
爬虫和数据分析初体验_第1张图片

你可能感兴趣的:(python,python,爬虫,数据分析,网络)