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语句为一整块。
国内城市历史天气
从网页源代码中,我们发现城市历史链接在如下代码块中(id="cityall"下的id="tool_site"中):
***********
***********
国内城市历史天气
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)
获得的结果中含有#和字母等无关字符,需要去除,比较简单这里就不在说明。
下一次我们讲述,在获得城市链接后如何获得月份链接和每日天气。
谢谢!祝各位天天开心。