点击关注我哦

一篇文章带你了解Python爬虫

数据科学只有通过数据才能实现,而在现实世界中,数据通常不会有现成的.csv文件等你使用。你必须去自己寻找。这就是为什么爬虫对数据科学非常重要的原因。

但是如果你是一个初学者的话,抓取信息本身看起来就有点复杂了。如果你想要开始抓取信息,想要知道如何用一种简单、快速的方式写出你的第一个爬虫,这篇文章就是为你准备的。

在本文中,我们将使用 quotes.toscrape.com 网站作为一个例子。这个网站包含了数百条名言,它们的作者,以及描述每一句名言的标签。这是我们要收集的信息。此外,您可以从网站名称推断,它是用于爬虫的。但并不是每个网页都是这样的,所以在开始之前确保你正在搜集的网站允许你这样做。

具体实现

对于我们将在本文中编写的爬虫,我们需要下面三个库:

· Pandas,用于数据处理,如果你对使用python的数据分析有一定了解,那么你可能已经熟悉它了;

· Urllib,打开并读取网页信息

· BeautifulSoup,解析 HTML,使得提取数据更加容易。

BeautifulSoup 是唯一需要手动安装的库。只需要使用运行以下命令通过pip进行安装:

pip install beautifulsoup4

安装了所有的库之后,我们就可以导入了。用urllib获取URL,然后用 BeautifulSoup 解析网页源代码。

import pandas as pd
from urllib.request import urlopen
from bs4 import BeautifulSoup
url = 'https://quotes.toscrape.com'
page = urlopen(url)
soup = BeautifulSoup(page, 'html.parser')

Going After the Data

如果你在网站上按下键盘上的 F12键,你就会看到它的源代码。在这里小编希望大家能够仔细的研究下,这对爬虫是很有帮助的。当然也可以通过 组合键Ctrl + shift + c 来审查页面上的每个元素。

在此过程中,我们注意到所有的名言都存储在 div标签下,名为“ quote”的类中 ,如下代码所示。我们需要做的就是抓住这些元素。

  <div class="quote" itemscope="" itemtype="http://schema.org/CreativeWork">...</div><div class="quote" itemscope="" itemtype="http://schema.org/CreativeWork">...</div><div class="quote" itemscope="" itemtype="http://schema.org/CreativeWork">...</div><div class="quote" itemscope="" itemtype="http://schema.org/CreativeWork">...</div><div class="quote" itemscope="" itemtype="http://schema.org/CreativeWork">...</div><div class="quote" itemscope="" itemtype="http://schema.org/CreativeWork">...</div><div class="quote" itemscope="" itemtype="http://schema.org/CreativeWork">...</div><div class="quote" itemscope="" itemtype="http://schema.org/CreativeWork">...</div><div class="quote" itemscope="" itemtype="http://schema.org/CreativeWork">...</div><div class="quote" itemscope="" itemtype="http://schema.org/CreativeWork">...</div>

选择元素一点都不难是,soup几乎包含了我们要用的任何功能。例如,如果这里的目标是获取页面的标题,那么只需要简单的一行代码:

print(soup.title)

它的输出结果就是:

<title>Quotes to Scrape</title>

如果只想得到标题中的文本,那么只需要对代码做一些小小的改动:

print(soup.title.text)

然而,由于源代码中有许多 div 标签,我们不能直接使用这种方法。但是我们可以使用 find _ all 方法。该方法能够检索页面上符合我们要求的所有元素。这里我们使用标签名和类名来检索:

quotes = soup.find_all('div', class_='quote')

上面的代码也可以改成如下所示:

quotes = soup.find_all('div', {'class': 'quote'})

使用这种语法,我们甚至可以指定更多的类进行筛选:

quotes = soup.find_all('div', {'class': {'quote', 'tags'}})

我们还可以使用 limit 参数来限制要检索的元素的数量。

现在我们已经获得了所有的quotes元素,在网页源码中打开其中一个元素,我们会看到:

<span class="text" itemprop="text">“The text is here.”</span>
<span>by <small class="author" itemprop="author">Albert Einstein</small>
<a href="/author/Albert-Einstein">(about)</a>
</span>
<div class="tags">Tags:<meta class="keywords" itemprop="keywords" content="change,deep-thoughts,thinking,world"> <a class="tag" href="/tag/change/page/1/">change</a><a class="tag" href="/tag/deep-thoughts/page/1/">deep-thoughts</a><a class="tag" href="/tag/thinking/page/1/">thinking</a><a class="tag" href="/tag/world/page/1/">world</a></div>

我们需要爬取的所有信息都在这里了,我们要做的是准确的找到它。我们要爬取的名言就在类名为“text”的span标签中。在small的标签中有一个“author”类,它存储着作者的名字信息。

然后我们循环解析每一个元素,就可以获取到所有的名言和它的作者。

for quote in quotes:text = quote.find('span', class_='text').textauthor = quote.find('small', class_='author').text

下面我们在循环中继续使用find_all方法爬取a标签中所有类名为“tag”的文本信息。

然后将每个标签的文本存储在列表中:

tags = quote.find('div', class_='tags').find_all('a')tags_list = []
for tag in tags:tags_list.append(tag.text)

存储数据

现在我们已经成功的爬到了想要的数据,但是我想你对只能在控制台中通过打印显示的数据并不感兴趣,下面我们将把数据存储在一个文件中,以便以后使用。

有几种方法可以做到这一点。最简单的方法是将列表中的每个引用的数据附加到另一个列表中。然后,我们可以轻松地将列表转换为一个DataFrame,并将其导出为.csv文件。

         single_quote = [text, author, tags_list]all_quotes.append(single_quote)
# Outside the loop
df = pd.DataFrame(all_quotes, columns=['quote', 'author', 'tags'])
df.to_csv('quotes.csv', index=False)

抓取更多数据

尽管每一页只有十个名言,但我们想爬取到更多的。要获得更多名言,我们需要跳转到下一页。同样,有不止一种方法可以做到这一点。

在本文爬取的网站上,我们可以将URL设置为

“https://quotes.toscrape.com/page/1/”而不是

“ https://quotes.toscrape.com”,这样我们就可以通过for循环更改网址的页码来循环爬取。

下面就是我们爬取到的前100个名言!

更多的挑战!更多的工具!

然而,并不是所有的网站都如同quotes.toscrape.com一样方便大家爬取。

当你开始爬取其他复杂网站的时候,将会遇到其他的挑战。你必须防止你的代码出错,这样它就不会在爬取成百上千网页时崩溃。你将不得不处理由 JavaScript 渲染的页面,这些页面 BeautifulSoup 无法解析,甚至还要处理交互式内容,这些内容会根据用户的操作改变页面。

幸运的是,您还将遇到新的工具来应对这些挑战。熟悉 request 库很重要,因为它比 urllib 更强大; Selenium 是 在遇到JavaScript 渲染页面时的一个更好的选择,因为它实际上可以打开并自动化浏览器来获取所有内容并与页面交互; 你也可以使用代理,比如 Infatica,来避免你的 IP 被加入黑名单。

随着目标的发展,希望你的工具也在发展。

·  END  ·

HAPPY LIFE

带你入门Python爬虫相关推荐

  1. 用几个最简单的例子带你入门 Python 爬虫

    作者 | ZackSock 来源 | 新建文件夹X(ID:ZackSock) 头图 | CSDN下载自视觉中国 前言 爬虫一直是Python的一大应用场景,差不多每门语言都可以写爬虫,但是程序员们却独 ...

  2. 图解爬虫,用几个最简单的例子带你入门Python爬虫

    一.前言 爬虫一直是Python的一大应用场景,差不多每门语言都可以写爬虫,但是程序员们却独爱Python.之所以偏爱Python就是因为她简洁的语法,我们使用Python可以很简单的写出一个爬虫程序 ...

  3. 王者荣耀五周年,带你入门Python爬虫基础操作(102个英雄+326款皮肤)

    简单的目录 1.概述 2.网页分析 2.1.html页面源数据 2.2.json源数据 3.数据请求 4.数据解析 4.1.html数据解析 4.1.1.bs4 4.1.2.xpath 4.2.jso ...

  4. 王者荣耀五周年,带你入门Python爬虫基础操作!

    1.概述 <王者荣耀>上线至今5个年头了,作为这些年国内最热门的手游(没有之一),除了带来游戏娱乐之外,我们在这五周年之际,试着从他们的官网找点乐趣,学习一下Python爬虫的一些简单基础 ...

  5. 手把手带你入门Python爬虫(二、爬虫预备知识)

    爬虫预备知识 一.计算机网络协议基础 二.Html.Css.Javascript Ajax 异步加载 GET请求 与 POST请求 3种content-type 三.爬虫基本方法 1. 采集方案分类 ...

  6. 手把手带你入门Python爬虫(一、工欲善其事必先利其器)

    工欲善其事必先利其器 一.下载Python 二.下载安装PyCharm 三.Mysql & Navcat 四.虚拟环境的安装和配置 1. 为什么需要安装虚拟环境? 2. 使用`pip`安装`v ...

  7. 手把手带你入门Python爬虫(五、CSDN论坛之模型设计)

    CSDN论坛之模型设计 一.CSDN论坛分析 二.模型设计与数据表设计 一.CSDN论坛分析 论坛主题列表页: 详情页: 博主个人详情页: 我们根据以上页面分析我们需要抓取的数据,然后设计模型. 二. ...

  8. 手把手带你入门Python爬虫(四、ORM与peewee)

    ORM与peewee 一.为什么要用ORM 二.ORM的选择 三.peewee使用 1. 安装 2. 创建并使用 3. 增删查改 (1) 新增 (2) 查询数据 (3) 修改数据 (4) 删除数据 一 ...

  9. 手把手带你入门Python爬虫(三、PyMySQL)

    PyMySQL 1.安装 2.新建Mysql数据表 3.使用pymysql 1.安装 pip install PyMySQL 2.新建Mysql数据表 使用Navcat for Mysql 创建数据库 ...

最新文章

  1. 关于进程间通信的学习心得
  2. mysql字符集查看_查看和设置mysql字符集
  3. LeetCode-链表-24. 两两交换链表中的节点
  4. 18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用,综合服务案例,编写一个应用程序调用远程支付宝远程服务场景
  5. Windows环境下通过lynx查看隐藏链接识别黑链方法
  6. android监听动画完成,android判断动画已结束示例代码
  7. HTML5 WebSocket
  8. 微服务系统和分布式系统的区别
  9. 最小二乘法 c 语言程序,最小二乘法的嵌入式C语言实现
  10. Linux命令怎么查找IP,在Linux中,如何查找您的IP地址
  11. 软考(网络工程师)-必备网络知识(笔记一)
  12. html语言span标签,html中span标签的作用是什么?
  13. python 数列筛选_对numpy中的数组条件筛选功能详解
  14. Windows上使用VLC插件的方式在IE浏览器上播放RTSP视频流
  15. JavaScript新的对象创建方式---Object.create()
  16. 19年NAACL纪实:自然语言处理的实用性见解
  17. 学数答题160904-不等式
  18. 在浏览器中切换标签页的快捷键
  19. 英语六级选词填空技巧
  20. linux clock函数使用方法

热门文章

  1. 哪些专科学校计算机师资好,计算机专科学校排名前十(最出名的10所计算机学院)...
  2. matlab 数据可视化
  3. 2022年保育员理论知识(高级)考试单选题专项训练及答案
  4. 缓冲区溢出基础与实践
  5. Ecava公司IntegraXor 缓冲区溢出漏洞
  6. 电子科大计算机学院院士,2019信息电子领域69位工程院院士有效候选人,这些高校入选人数多...
  7. html的script怎么转化成js,html转换js html代码如何转换成js文件
  8. microsoft office word 遇到问题需要关闭, 这是第二次遇到这个问题了
  9. sgu106-109
  10. embed 基本用法