网页爬虫抓取百度图片(本文针对初学者,我会用最简单的案例告诉你如何入门python爬虫)

优采云 发布时间: 2022-04-10 23:40

  网页爬虫抓取百度图片(本文针对初学者,我会用最简单的案例告诉你如何入门python爬虫)

  这篇文章是针对初学者的。我将用最简单的案例告诉你如何开始使用python爬虫!

  上手Python爬虫,首先需要解决四个问题

  一、你应该知道什么是爬虫吧?

  网络爬虫,其实叫网络数据采集,比较好理解。

  就是通过编程向Web服务器请求数据(HTML表单),然后解析HTML提取出你想要的数据。

  可以概括为四个步骤:

  根据url获取HTML数据,解析HTML,获取目标信息并存储数据,重复第一步

  这将涉及数据库、Web 服务器、HTTP 协议、HTML、数据科学、网络安全、图像处理等等。但是对于初学者来说,没有必要掌握这么多。

  二、你有多想学python

  如果你不会python,你需要先学习python,一种非常简单的语言(相对于其他语言)。

  编程语言的基本语法无非就是数据类型、数据结构、运算符、逻辑结构、函数、文件IO、错误处理。这会很无聊,但学起来并不难。

  刚开始学爬虫,甚至不需要学习python的类、多线程、模块等稍有难度的内容。找一本初学者的教材或者网上教程,用了十多天,可以对python的基础有一个三四点的了解,然后就可以玩爬虫了!

  当然,前提是这十天一定要仔细敲代码,反复咀嚼语法逻辑。比如列表、字典、字符串、if语句、for循环等最核心的东西,一定要心手可得。

  教材选择更多。我个人推荐官方的python文档和简洁的python教程。前者更系统,后者更简洁。

  三、为什么你需要了解 HTML

  前面说过,爬虫要爬取的数据隐藏在网页中的HTML中,有点混乱!

  这就是维基百科解释 HTML 的方式

  超文本标记语言(英文:HyperTextMarkupLanguage,简称:HTML)是一种用于创建网页的标准标记语言。HTML 是一种底层技术,许多 网站 使用 CSS 和 JavaScript 来设计网页、Web 应用程序和移动应用程序的用户界面 [3]。Web 浏览器可以读取 HTML 文件并将它们呈现为可视网页。HTML 描述了 网站 的结构语义作为提示,使其成为一种标记语言而不是一种编程语言。

  综上所述,HTML是一种用于创建网页的标记语言,嵌入了文本、图像等数据,可以被浏览器读取并渲染到我们看到的网页中。

  所以我们会先爬取HTML,然后解析数据,因为数据是隐藏在HTML中的。

  学习HTML并不难,它不是一门编程语言,你只需要熟悉它的标记规则,这里是一个大概的介绍。

  HTML 标记收录几个关键部分,例如标签(及其属性)、基于字符的数据类型、字符引用和实体引用。

  HTML 标签是最常见的,通常成对出现,例如 .

  在这些成对的标签中,第一个标签是开始标签,第二个标签是结束标签。两个标签之间是元素的内容(文本、图片等),有些标签没有内容,是空元素,比如

  .

  下面是一个经典的 Hello World 程序示例:

  

This is a title

<p>Hello world!

</p>

  HTML 文档由嵌套的 HTML 元素组成。它们由 HTML 标记表示,用尖括号括起来,例如

  [56]

  在一般情况下,一个元素由一对标签表示:“开始标签”

  带有“结束标签”

  . 带有文本内容的元素放置在这些标签之间。

  四、了解python网络爬虫的基本原理

  编写python爬虫时,只需要做两件事:

  对于这两件事,python有相应的库来帮助你,你只需要知道如何使用它们。

  五、使用python库爬取百度首页标题和图片

  首先,发送HTML数据请求,可以使用python内置库urllib,里面有一个urlopen函数,可以根据url获取HTML文件。这里尝试获取百度首页“/”的HTML内容

  # 导入urllib库的urlopen函数

from urllib.request import urlopen

# 发出请求,获取html

html = urlopen("https://www.baidu.com/")

# 获取的html内容是字节,将其转化为字符串

html_text = bytes.decode(html.read())

# 打印html内容

print(html_text)

  看看效果:

  部分截取输出的html内容

  下面我们来看看真正的百度主页html是什么样子的。如果你使用的是谷歌浏览器,在百度首页打开设置&gt;更多工具&gt;开发者工具,点击元素,可以看到:

  在谷歌浏览器中查看 HTML

  对比一下就知道刚才python程序得到的html和网页中的html是一样的!

  获取到HTML之后,接下来就是解析HTML,因为你想要的文字、图片、视频都隐藏在HTML中,需要通过某种手段提取出需要的数据。

  Python 还提供了很多强大的库来帮助你解析 HTML。这里使用著名的python库BeautifulSoup作为解析上面已经获取的HTML的工具。

  BeautifulSoup 是一个需要安装和使用的第三方库。您可以从命令行使用 pip 安装它:

  pip install bs4

  BeautifulSoup 会将 HTML 内容转换为结构化内容,您只需从结构化标签中提取数据即可:

  比如我想获取百度首页的标题“百度,我会知道”,该怎么做?

  这个标题被两个标签包围,一个是一级标签,另一个是二级标签,所以只需从标签中取出信息

  # 导入urlopen函数

from urllib.request import urlopen

# 导入BeautifulSoup

from bs4 import BeautifulSoup as bf

# 请求获取HTML

html = urlopen("https://www.baidu.com/")

# 用BeautifulSoup解析html

obj = bf(html.read(),&#x27;html.parser&#x27;)

# 从标签head、title里提取标题

title = obj.head.title

# 打印标题

print(title)

  查看结果:

  这样就完成了,成功提取了百度首页的标题。

  如果我想下载百度主页logo图片怎么办?

  第一步是获取网页的所有图片标签和网址。这可以使用 BeautifulSoup 的 findAll 方法,该方法可以提取标签中收录的信息。

  一般来说,HTML中所有的图片信息都会在“img”标签中,所以我们可以通过findAll(“img”)来获取所有图片的信息。

  # 导入urlopen

from urllib.request import urlopen

# 导入BeautifulSoup

from bs4 import BeautifulSoup as bf

# 请求获取HTML

html = urlopen("https://www.baidu.com/")

# 用BeautifulSoup解析html

obj = bf(html.read(),&#x27;html.parser&#x27;)

# 从标签head、title里提取标题

title = obj.head.title

# 使用find_all函数获取所有图片的信息

pic_info = obj.find_all(&#x27;img&#x27;)

# 分别打印每个图片的信息

for i in pic_info:

print(i)

  查看结果:

  打印出所有图片的属性,包括class(元素类名)、src(链接地址)、长宽高。

  有一张百度主页logo的图片,图片的class(元素类名)为index-logo-src。

  [//www.baidu.com/img/bd_logo1.png, //www.baidu.com/img/baidu_jgylogo3.gif]

  可以看到图片的链接地址在src属性中。我们需要获取图片的链接地址:

  # 导入urlopen

from urllib.request import urlopen

# 导入BeautifulSoup

from bs4 import BeautifulSoup as bf

# 请求获取HTML

html = urlopen("https://www.baidu.com/")

# 用BeautifulSoup解析html

obj = bf(html.read(),&#x27;html.parser&#x27;)

# 从标签head、title里提取标题

title = obj.head.title

# 只提取logo图片的信息

logo_pic_info = obj.find_all(&#x27;img&#x27;,class_="index-logo-src")

# 提取logo图片的链接

logo_url = "https:"+logo_pic_info[0][&#x27;src&#x27;]

# 打印链接

print(logo_url)

  结果:

  获取地址后,可以使用urllib.urlretrieve函数下载logo图片

  # 导入urlopen

from urllib.request import urlopen

# 导入BeautifulSoup

from bs4 import BeautifulSoup as bf

# 导入urlretrieve函数,用于下载图片

from urllib.request import urlretrieve

# 请求获取HTML

html = urlopen("https://www.baidu.com/")

# 用BeautifulSoup解析html

obj = bf(html.read(),&#x27;html.parser&#x27;)

# 从标签head、title里提取标题

title = obj.head.title

# 只提取logo图片的信息

logo_pic_info = obj.find_all(&#x27;img&#x27;,class_="index-logo-src")

# 提取logo图片的链接

logo_url = "https:"+logo_pic_info[0][&#x27;src&#x27;]

# 使用urlretrieve下载图片

urlretrieve(logo_url, &#x27;logo.png&#x27;)

  最终图像保存在“logo.png”中

  六、结束语

  本文以爬取百度首页标题和logo图片为例,讲解python爬虫的基本原理以及相关python库的使用。这是一个比较基础的爬虫知识,后面还有很多优秀的python爬虫库和框架等着学习。

  当然,如果你掌握了本文提到的知识点,你就已经开始上手python爬虫了。来吧,少年!

  结尾

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线