前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python】Python爬虫爬取中国天气网(一)

【Python】Python爬虫爬取中国天气网(一)

作者头像
树枝990
发布2020-08-19 10:35:21
2.7K0
发布2020-08-19 10:35:21
举报
文章被收录于专栏:拇指笔记拇指笔记

0. 本文内容

最近想写一个爬取中国天气网的爬虫。所以打算写一个关于爬虫的系列教程,本文介绍爬虫的基础知识和简单使用。

  1. 获取HTML文件
  2. Beautiful Soup4库安装
  3. Beautiful Soup4对象类型说明
  4. 爬取网页标题
  5. 爬取网页图片

1. 关于爬虫

维基百科是这样解释爬虫的。

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。

实现一个爬虫,大致需要三步

  1. 根据url获取HTML数据
  2. 解析获取到的HTML数据,获取信息
  3. 存储数据

1.1 获取HTML文件

HTML是创建网页的标记语言,其中嵌入了文本、图像等数据,然后被浏览器读取并渲染成我们看到的网页的样子。

使用python内置库urllib中的urlopen函数,就可以根据url获取HTML文件。

1.1.1 HTML标签

在HTML中 用于标记的符号称为超文本标记语言标签,HTML标签的组成如下。

  1. HTML标签以尖括号标识标签名称,如<title>
  2. 大多数HTML标签是成对存在的(开始标签和结束标签),如<head>,</head>
  3. 也有极少数单独存在的标签,如<br/>,<hr/>
  4. 标签中还可以添加属性值。

1.1.2 实现方法

这里以中国天气网为例,使用python内置库urllib中的urlopen函数获取该网站的HTML文件。

代码语言:javascript
复制
from urllib.request import urlopen
#使用urlopen获取一个网页的内容
html = urlopen("http://www.weather.com.cn/")
#获取一个网页html内容,并使用decode将其转化为字符串
html_text = bytes.decode(html.read())
print(html_text)

获取到的HTML文件

1.2 解析HTML文件

读取到网页内容后,需要在HTML文件中找到我们需要的信息。这里使用BeautifulSoup库来实现这个功能。

Beautiful库的官网介绍如下

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

1.2.1 Beautiful Soup4库安装

目前Beautiful Soup4已经被移植到BS4中了,所以安装使用如下命令,我这里使用的清华源。

代码语言:javascript
复制
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4

安装成功后,cmd中会显示

代码语言:javascript
复制
Successfully built bs4
Installing collected packages: bs4
Successfully installed bs4-0.0.1

现在在jupyter里使用如下代码测试一下是否成功安装。一定要注意大写

代码语言:javascript
复制
from bs4 import BeautifulSoup

1.2.2 Beautiful Soup4中的对象

Beautiful Soup4将HTML文档转换成树形结构,每个节点都是Python对象。这些对象可以归为4类

  1. Tag:HTML中的标签加上标签内的内容(例如下面的爬取标题)。 它有两个属性(name和attrs),name用来获取标签的名称;attrs用来获取属性。
  2. NavigableString :标签内部文字的属性。 使用.string可以获得标签内的文字内容
  3. BeautifulSoup :表示一个文档的全部内容。
  4. Comment :特殊的NavigableString对象。

1.2.3 获取网页标题

还是以刚才的中国天气网为例,现在我们来爬取它的标题。

代码语言:javascript
复制
from bs4 import  BeautifulSoup as bf
from urllib.request import urlopen
html = urlopen("http://www.weather.com.cn/")
obj = bf(html.read(),'html.parser')
title = obj.head.title
print(title)

爬取到的信息如下

代码语言:javascript
复制
<title>首页-中国天气网</title>

1.2.4 获取网页图片

获取网页中的一张图片步骤如下

  1. 使用BeautifulSoup中的findall方法获取网页所有图片的url。
  2. 根据图片的地址,使用 urllib.urlretrieve函数下载图片。

图片信息一般都包含在'img'标签中,所以我们通过find_all('img')来爬取网页的图片信息。

代码语言:javascript
复制
from bs4 import  BeautifulSoup as bf
from urllib.request import urlopen
#使用urlopen获取一个网页的内容
html = urlopen("http://www.weather.com.cn/")
#解析HTML文件
obj = bf(html.read(),'html.parser')
#获取网页中图片文件的信息
pic = obj.find_all('img')
#输出所有图片信息
for i in pic:
    print(i)

爬取到的图片信息如下

可以看到,图片的属性有class、src和长宽等,src代表链接地址。

得到图片信息后,需要提取图片链接来下载(这里我选的第五张图片),

代码语言:javascript
复制
url = pic[4]['src']

然后使用urllib.urlretrieve函数下载图片。

代码语言:javascript
复制
urllib.urlretrieve(url, '1.png')

完整程序如下

代码语言:javascript
复制
from bs4 import  BeautifulSoup as bf
from urllib.request import urlopen
from urllib.request import urlretrieve
#使用urlopen获取一个网页的内容
html = urlopen("http://www.weather.com.cn/")

obj = bf(html.read(),'html.parser')
title = obj.head.title
pic = obj.find_all('img')
#print (obj.prettify())
url = pic[4]['src']
urlretrieve(url, 'pachong1.png')
print(title)
print(url)

爬取到的图片

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 拇指笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. 本文内容
  • 1. 关于爬虫
    • 1.1 获取HTML文件
      • 1.1.1 HTML标签
      • 1.1.2 实现方法
    • 1.2 解析HTML文件
      • 1.2.1 Beautiful Soup4库安装
      • 1.2.2 Beautiful Soup4中的对象
      • 1.2.3 获取网页标题
      • 1.2.4 获取网页图片
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档