基于requests、BeautifulSoup爬取气温排行榜
- 内容说明
- 第一步 环境准备
- 第二步 分析爬取页面
- 第三步 代码设计
- 第四步 查看结果
内容说明
大家好,这是我第一次发博客,因为最近对Python爬虫感兴趣,所有就自学了一下,下面通过一个实例来总结一下我的入门。这个实例用到了requests库和BeautifulSoup4库,来实现一个单页面的数据爬取。
第一步 环境准备
打开Pycharm,新建一个Python文件,导入我们要用到的requests库和BeautifulSoup4(bs4)库以及单独引入bs4的BeautifulSoup模块,
import requestsimport bs4from 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.textexcept: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爬虫的第一份代码啦,如果大家发现什么不对的地方,欢迎指正~~~~噢咦!