python爬虫入手篇

python网络爬虫小白篇

这个是我学习了python一些之后写的一个简单爬虫,爬的是天气网站的数据。代码很low,不过值得一看,都用的比较简单的方法进行网页爬取。

主要思想:首先附上url:http://www.weather.com.cn/weather1d/101200101.shtml 待实验的网页地址

1.用rquests库做网络爬取,或用beautifusoup4做数据解析、分析。用allUniv列表存储最终的数据。

2.首先进入到待爬取的网页,然后选择‘查看元素’,查看网页源代码,找到我们需要爬取网页数据的部分。

1)首先我们需要一个主城市,

 

通过分析知道:这里需要找到class_='crumbs'的div,然后在这个div中找第二个‘a’标签,然后获取这个标签的值。

2)然后去找‘周边地区’的网页数据,

找到class_='aro_city' 的div标签。

3)然后在这个标签中找到所有‘li’元素,然后逐个遍历这些’li’元素进行获取数据。

4)‘li’标签中找’span’标签,表示周边地区城市名字,’i’标签表示该地区温度情况。

5)最终搜集好数据后,进行数据整理工作。显示数据

下面是代码:欢迎提问与错误指出,这个程序有个缺陷,就是不能处理直辖市的天气情况,这个稍作修改就可以改好。


#encoding=utf-8
import requests
from bs4 import BeautifulSoup
from lxml import etree
import lxml
allUniv=[]#储存全部数据
zhixiaCitys=['北京','上海','广州','天津','香港','澳门','台湾']
def getHtmlText(url): #网络函数
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()
        r.encoding='utf-8'
        return r.text
    except:
        return "cuowu "

def fillUnivList(soup1): #数据获取函数
    mainCityP=soup1.find('div',class_='crumbs')
    count=0
    mainRecord='' #储存主城区的名字
    for each in mainCityP:
        count+=1;
        mainCity=each.find_next('a')
        if count==2:   #查找第二个标签的值
            mainRecord=mainCity.string  
            break
    data1 = soup1.find('div',class_='aro_city')#找到周边地区数据
    data2 = data1.find_all('li')#储存所有周边地区数据
    for each in data2:   #遍历每一个周边地区的数据
        singleUniv=[]
        singleUniv.append(mainRecord) 
        itd1=each.find('span')
        singleUniv.append(itd1.string) #存储周边地区城市名字
        itd2=each.find('i')
        singleUniv.append(itd2.string)#存储周边地区城市温度
        allUniv.append(singleUniv) 
        
def dataDo():  #数据处理函数 
    a=len(allUniv) 
    for each in range(0,a): 
        maxTemp=''
        minTemp=''
        flag=0
        for j in allUniv[each][2]:
            if j!='/' and flag==0:
                maxTemp+=j
            elif flag==0:
                maxTemp+='°C'
                flag=1
            else:
                minTemp+=j
        allUniv[each][2]=minTemp
        allUniv[each].append(maxTemp)

def printUnivList(): #数据展示函数
    print("{:^4}{:^10}{:^5}{:^8}".format("城市名称","周边地区","最低温度","最高温度"))
    for i in range(0,len(allUniv)):
        u=allUniv[i]
        print("{:^4}{:^16}{:^0}{:^18}".format(u[0],u[1],u[2],u[3]))
        
        
def main(): #主函数
    url='http://www.weather.com.cn/weather1d/101200101.shtml#input'
    html = getHtmlText(url)
    soup1=BeautifulSoup(html,"html.parser")
    fillUnivList(soup1)
    dataDo()
    printUnivList()
main()

 数据结果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值