基于requests、BeautifulSoup爬取气温排行榜

内容说明

大家好,这是我第一次发博客,因为最近对Python爬虫感兴趣,所有就自学了一下,下面通过一个实例来总结一下我的入门。这个实例用到了requests库和BeautifulSoup4库,来实现一个单页面的数据爬取。

第一步 环境准备

打开Pycharm,新建一个Python文件,导入我们要用到的requests库和BeautifulSoup4(bs4)库以及单独引入bs4的BeautifulSoup模块,

import requests
import bs4
from bs4 import BeautifulSoup

第二步 分析爬取页面

我准备爬取的是2345天气预报-全国最高气温排行榜的排行榜,就是下面这个页面咯~
在这里插入图片描述
确定了爬取页面后就开始分析页面代码了,打开谷歌的检查,查看HTML代码,找到要爬取的部分,可以看到我想要的内容在一个class为j-tbody的div里面
在这里插入图片描述
可以看出每一个class为j-td的div就是一项数据,那直接拿到每一项j-td里的数据输出不就好了,接下来就开始设计程序框架了~
在这里插入图片描述

第三步 代码设计

1.首先,我们写一个getHTML来获取HTML文档的函数,函数的参数是url,是爬取页面的url,采用requests的get方法获取页面,raise_for_status()方法是判断返回的是不是200。如果是200,表示返回的内容是正确的,如果不是200,会产生一个HttpError异常。

# 获取文档
def getHtml(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        # 规范字符编码
        r.encoding = r.apparent_encoding
        # 网页信息
        return r.text
    except:
        return "~~出错了!!"

2.写函数writeInfo对获得的HTML文档进行解析,将我们想要的数据进行获取并且存储,参数text为我们上面获取的文档。List为我们存储数据的列表。find()方法查找数据的容器元素,然后得到并循环它的子标签,再得到item中的每一个div,因为得到的结果是一个列表,所以用索引来得到子标签的text。然后将一条数据用列表存储append进结果列表,最后该函数返回一个结果列表。

# 解析文档
def writeInfo(text):
	List = []
    soup = BeautifulSoup(text,'html.parser')
    tag = soup.find('div',class_='j-tbody')
    for item in tag.children:
    	# 判断item是否为bs4的Tag类型(是不是标签)
        if isinstance(item,bs4.element.Tag):
            div = item('div')
            List.append([div[0].text,div[1].text,div[2].text,div[3].text])
    return List

3.写函数printResult将获取的数据进行打印输出,将上述得到的结果列表插入该函数,然后遍历打印输出,因为注意到下图数据中文本中有很多空格和换行,这样输出肯定排版不好看,所以这里做了一个去空格和去换行符,用.replace(" ", "").replace("\n", "")就好了。
在这里插入图片描述

#打印结果
def printResult(resultList):
    print("{:^10}\t{:^6}\t{:^16}\t{:^5}".format("排名", "城市", "今天气温", "平均气温"))
    for item in resultList:
        index = item[0].replace(" ", "").replace("\n", "")
        city = item[1].replace(" ", "").replace("\n", "")
        tem = item[2].replace(" ", "").replace("\n", "")
        artem = item[3].replace(" ", "").replace("\n", "")
        print("{:^10}\t{:^6}\t{:^12}\t{:^8}".format(index, city, tem, artem))

4.写主函数,定义变量,调用前面的功能函数

# 主函数
def main():
    # 爬取的页面链接
    url = "http://tianqi.2345.com/temperature-rank.htm"
    # 接收获取的HTML页面
    text = getHtml(url)
    # 接收返回的结果列表
    resultList = writeInfo(text)
    # 调用打印输出函数
    printResult(resultList )

5.最后调用主函数

# 执行主函数
main()

第四步 查看结果

在这里插入图片描述
这就是我入门Python爬虫的第一份代码啦,如果大家发现什么不对的地方,欢迎指正~~~~噢咦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值