基于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爬虫的第一份代码啦,如果大家发现什么不对的地方,欢迎指正~~~~噢咦!