网页爬虫抓取百度图片(本文针对初学者,我会用最简单的案例告诉你如何入门python爬虫 )
优采云 发布时间: 2021-09-30 02:11网页爬虫抓取百度图片(本文针对初学者,我会用最简单的案例告诉你如何入门python爬虫
)
这篇文章是针对初学者的,我会用最简单的案例来告诉你如何开始使用python爬虫!
开始使用Python爬虫,首先需要解决四个问题
一、你应该知道什么是爬虫吧?
网络爬虫其实叫做Web Data采集,比较容易理解。
就是通过编程向Web服务器请求数据(HTML形式),然后解析HTML,提取出你想要的数据。
总结为四个主要步骤:
根据url获取HTML数据解析HTML,获取目标信息存储数据重复第一步
这将涉及很多内容,例如数据库、Web 服务器、HTTP 协议、HTML、数据科学、网络安全和图像处理。但是对于初学者来说,没必要掌握那么多。
二、python学多少
如果你不懂python,你需要学习python,一种非常简单的语言(相对于其他语言)。
编程语言的基本语法无非是数据类型、数据结构、运算符、逻辑结构、函数、文件IO、错误处理。学习起来会很枯燥,但并不难。
刚开始,你甚至不需要学习python类、多线程、模块等高难度内容。找本初学者的教材或者网上教程,花十几天的时间,可以对python的基础有三到四点的了解,这时候就可以玩爬虫了!
当然,前提是你这十天一定要认真打好代码,反复咀嚼语法逻辑,比如列表、字典、字符串、if语句、for循环等核心东西一定要熟透心手.
教材选择比较多。个人推荐python官方文档和python简明教程。前者更系统,后者更简洁。
三、为什么你需要了解 HTML
前面提到爬虫想要爬取的数据隐藏在网页的HTML中,有点间接!
维基百科这样解释 HTML
超文本标记语言(英文:Hyper Text Markup Language,简称 HTML)是一种用于创建网页的标准标记语言。HTML 是一项基本技术,经常与 CSS 和许多 网站 一起使用来设计网页、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是什么样子的。如果您使用的是谷歌浏览器,在百度首页打开设置>更多工具>开发者工具,点击元素,可以看到:
在 Google Chrome 中查看 HTML
通过对比你就会知道,刚才通过python程序得到的HTML和网页是一样的!
获取到HTML后,下一步就是解析HTML,因为你想要的文字、图片、视频都隐藏在HTML中,需要通过某种方式提取出需要的数据。
Python 还提供了许多强大的库来帮助您解析 HTML。这里使用了著名的python库BeautifulSoup作为解析上面已经得到的HTML的工具。
BeautifulSoup 是第三方库,需要安装使用。只需在命令行上使用 pip 安装它:
pip install bs4
BeautifulSoup 会将 HTML 内容转换为结构化内容,您只需要从结构化标签中提取数据即可:
比如我想得到百度首页的标题“我点击百度就知道了”,怎么办?
这个title被两个label困住了,一个是primary label,一个是secondary label,所以从label里面取出信息就行了。
# 导入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(),'html.parser')
# 从标签head、title里提取标题
title = obj.head.title
# 打印标题
print(title)
看看结果:
到此,百度主页的标题就提取成功了。
如果我想下载百度首页标志图片怎么办?
第一步是获取网页的所有图片标签和网址。这个可以使用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(),'html.parser')
# 从标签head、title里提取标题
title = obj.head.title
# 使用find_all函数获取所有图片的信息
pic_info = obj.find_all('img')
# 分别打印每个图片的信息
for i in pic_info:
print(i)
看看结果:
打印所有图片的属性,包括class(元素类名)、src(链接地址)、长宽高等。
其中有一张百度首页logo的图片,图片的类(元素类名)为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(),'html.parser')
# 从标签head、title里提取标题
title = obj.head.title
# 只提取logo图片的信息
logo_pic_info = obj.find_all('img',class_="index-logo-src")
# 提取logo图片的链接
logo_url = "https:"+logo_pic_info[0]['src']
# 打印链接
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(),'html.parser')
# 从标签head、title里提取标题
title = obj.head.title
# 只提取logo图片的信息
logo_pic_info = obj.find_all('img',class_="index-logo-src")
# 提取logo图片的链接
logo_url = "https:"+logo_pic_info[0]['src']
# 使用urlretrieve下载图片
最终图像保存在'logo.png'
六、结论
本文以抓取百度首页标题和logo图片为例,讲解python爬虫的基本原理以及相关python库的使用。这是比较基础的爬虫知识,还有很多优秀的python爬虫库和框架有待以后学习。
当然,如果你掌握了本文讨论的知识点,你就已经开始使用python爬虫了。来吧,男孩!
这里有一个方便大家的python学习交流群:196872581免费领取学习路线、大纲、课程等资料