VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • 《爬虫学习》(五)(爬虫实战之爬取天气信息)(3)

bs4库一般使用方法是find或者find_all方法(详细内容见上一篇博客)

find方法比较使用的是可以查找指定内容的数据,使用attrs={}来定制条件,代码中我用了attrs={'class':'conMidtab'}或者使用class_='conMidtab'

查看网页源代码可知

 

 

 通过'class':'conMidtab'来定位到所需信息的表

 

 

 再分析:因为有多个conMidtab,所以测试分析得知多个conMidtab对应的是今天,明天,后天......的天气情况

我们分析的是今天的情况,所以取第一个conMidtab,使用soup.find("div",class_="conMidtab")获取第一个conMidtab的内容

 

 

 由上知:conMidtab下的多个class="conMidtab2"代表不同的省的天气信息

但是在研究可以发现,所有天气信息都是存储在table里的,因此获取所有tables即可——cons.find_all('table')

 

 

 同时对于每一个table而言:第三个tr开始才是对应的城市信息,故对于每一个table获取trs = table.find_all("tr")[2:]

 

 

易错点:同时发现对于每个省第一个城市,它隐藏在tr的第二个td里,而除此之外的该省其他城市则在tr的第一个td里,因此使用一个if和else判断

enumerate方法可以产生一个index下标,因此在遍历trs的时候可以知道当index==0的时候是第一行

 

 

 

之后分析:城市名字:对于每个省第一个城市,它隐藏在tr的第二个td里,而除此之外的该省其他城市则在tr的第一个td里

     最高气温:对于每个省第一个城市,它隐藏在tr的第五个td里,而除此之外的该省其他城市则在tr的第四个td里

因此使用

1
2
3
4
5
6
if index == 0:
         tds = tr.find_all('td')[1]
         qiwen = tr.find_all('td')[4]
     else:
         tds = tr.find_all('td')[0]
         qiwen = tr.find_all('td')[3]<br>最后使用stripped_strings获取字符串并且添加到data列表里<br><br><strong>3.进行所有城市的数据获取:<br></strong>
1
2
3
4
5
6
7
8
9
10
11
12
13
def main():
    urls = [
        "http://www.weather.com.cn/textFC/hb.shtml",
        "http://www.weather.com.cn/textFC/db.shtml",
        "http://www.weather.com.cn/textFC/hd.shtml",
        "http://www.weather.com.cn/textFC/hz.shtml",
        "http://www.weather.com.cn/textFC/hn.shtml",
        "http://www.weather.com.cn/textFC/xb.shtml",
        "http://www.weather.com.cn/textFC/xn.shtml",
        "http://www.weather.com.cn/textFC/gat.shtml"
    ]
    for url in urls:
        parse_data(url)  

相关教程