Python 简单的爬虫案例——获取历史天气(一)
1 前期准备
安装requests和bs4包,这两个库是爬虫常用的包,简单实用。
建议用pip匹配安装Python包。具体步骤简单介绍一下请参照如何用pip安装模块和包。
2 具体过程
我们的目标是获得天气网(天气网链接)中各个城市过去十年每一天的天气情况。
天气网页面如下:
import requests
import bs4
response = requests.get('http://lishi.tianqi.com/')
soup = bs4.BeautifulSoup(response.text,"html.parser")
arrCityName = [] #城市名称
arrCityLink = [] #城市链接
#选出内容所在区域
for tagone in soup.find_all('div', id="cityall"):
for tagtwo in tagone.find_all('div',id="tool_site"):
#获取城市链接
for a in tagtwo.select('a'):
print(a.get('href'))
arrCityLink.append(a.get('href'))
#获取城市名称
for a in tagtwo.select('a'):
print(a.text)
arrCityName.append(a.text)
结果如下所示:
a 获取网页全部内容
response = requests.get('http://lishi.tianqi.com/')
soup = bs4.BeautifulSoup(response.text,"html.parser")
这两句代码的目的是将网址中的内容传给soup变量 。
b 查找城市链接所在的代码块
接下来需要找到城市链接所在的代码块,如下代码所示:在html语言中,对应的div语句为一整块。
<div class="box-hd">
<h3 class="box-t-l">国内城市历史天气</h3>
</div>
从网页源代码中,我们发现城市历史链接在如下代码块中(id="cityall"下的id="tool_site"中):
<div id="cityall">
<div class="lishi01"><script>lishi_index_01();</script></div>
<div class="crl mb5"></div>
<div align="center" class="travel_js">
***********
***********
<div id="tool_site" class="box-base">
<div class="box-hd">
<h3 class="box-t-l">国内城市历史天气</h3>
</div>
<div style="padding:10px 15px 20px 15px">
<ul class="bcity" id="city_A">
<li><a href="#" class="one" title="A">A</a></li>
<li><a href="http://lishi.tianqi.com/acheng/index.html" title="阿城历史天气" target="_blank">阿城</a></li>
<li><a href="http://lishi.tianqi.com/anda/index.html" title="安达历史天气" target="_blank">安达</a></li>
<li><a href="http://lishi.tianqi.com/antu/index.html" title="安图历史天气" target="_blank">安图</a></li>
<li><a href="http://lishi.tianqi.com/anshan/index.html" title="鞍山历史天气" target="_blank">鞍山</a></li>
<li><a href="http://lishi.tianqi.com/angangxiqu/index.html" title="昂昂溪历史天气" target="_blank">昂昂溪</a></li>
<li><a href="http://lishi.tianqi.com/aiminqu/index.html" title="爱民历史天气" target="_blank">爱民</a></li>
</ul>
<ul class="bcity" id="city_B">
<li><a href="#" class="one" title="B">B</a></li>
<li><a href="http://lishi.tianqi.com/beijing/index.html" title="北京历史天气" target="_blank">北京</a></li>
<li><a href="http://lishi.tianqi.com/baoshan/index.html" title="宝山历史天气" target="_blank">宝山</a></li>
***********
***********
于是我们就利用查询语句,查到城市链接所在的内容,内容放在tagtwo中,代码如下所示:
for tagone in soup.find_all('div', id="cityall"):
for tagtwo in tagone.find_all('div',id="tool_site"):
查询代码区域的方法为find_all(***)
c 提取链接和城市名称
找到了城市链接所在块后,我们发现城市链接在标签a中,因此我们需要提取标签a,方法为select(),代码如下:
for a in tagtwo.select('a'):
获得标签a后我们就可以用方法get()来获得标签的属性,用text来获得标签内容,代码如下:
#获取城市链接
for a in tagtwo.select('a'):
print(a.get('href'))
arrCityLink.append(a.get('href'))
#获取城市名称
for a in tagtwo.select('a'):
print(a.text)
arrCityName.append(a.text)
获得的结果中含有#和字母等无关字符,需要去除,比较简单这里就不在说明。
下一次我们讲述,在获得城市链接后如何获得月份链接和每日天气。
谢谢!祝各位天天开心。