使用BeautifulSoup4全方位解析爬取全国天气数据

使用BeautifulSoup4全方位解析爬取全国天气数据

一、小tips

# 通过requests的一个get请求去请求数据
response = requests.get(url)
response.content -->二进制数据

response.content.decode('utf-8')  # 加了decode自动转化为字符串

response.text -->字符串
stripped_strings:获取一个标签下面的子孙节点的文本信息
# 解析网页,使用html5lib可以更好的解析
soup = BeautifulSoup(text,'html5lib')
#find直接返回元素信息
conMidtab = soup.find('div',class_='conMidtab')
#find_all直接返回的是列表
tables = conMidtab.find_all('table')
#enumerate()会返回两个值,第一个是索引,第二个是索引所对应的元素
for index,tr in enumerate(trs):
    tds = tr.find_all('td')
    city_td = tds[0]  #城市
    if index==0:
        city_td = tds[1]
    city=list(city_td.stripped_strings)[0]

    temp_td = tds[-2]  #温度
    temp = list(temp_td.stripped_strings)[0]
    print('城市:',city,'温度:',temp)
# break  #先打印一个城市的信息

二、Steps

1.定义一个函数解析url

①通过requests的一个get请求去请求数据

②通过BeautiSoup4解析网页,使用html5lib可以更好的解析

③找网络元素:

第一步:找conMidtab

第二步:找table

第三步:找tr

第四步:找td,第一个td是城市,倒数第2个td是气温

三、Code

import requests
from bs4 import BeautifulSoup

#定义一个函数解析url
def parse_page(url):
    # 通过requests的一个get请求去请求数据
    response = requests.get(url)
    #出现乱码使用decode('utf-8')
    text = response.content.decode('utf-8')
    # 解析网页,使用html5lib可以更好的解析
    soup = BeautifulSoup(text,'html5lib')

    #可以找网络元素
    #第一步,找conMidtab:find直接返回元素信息
    conMidtab = soup.find('div',class_='conMidtab')
    # 第二步,找table:find_all直接返回的是列表,以列表形式返回
    tables = conMidtab.find_all('table')
    # 第三步,找tr
    for table in tables:
        trs = table.find_all('tr')[2:]  #过滤掉前面两个的信息
        # 第四步,找td,第一个td是城市,倒数第2个td是气温
        #enumerate()会返回两个值,第一个是索引,第二个是索引所对应的元素
        for index,tr in enumerate(trs):
            tds = tr.find_all('td')
            city_td = tds[0]  #城市
            if index==0:
                city_td = tds[1]
            city=list(city_td.stripped_strings)[0]

            temp_td = tds[-2]  #温度
            temp = list(temp_td.stripped_strings)[0]
            print('城市:',city,'温度:',temp)

    # print(conMidtab)

#main函数
def main():
    url = 'http://www.weather.com.cn/textFC/gat.shtml'  #网址
    parse_page(url)

if __name__ == '__main__':
    main()

到这里,我们就成功的掌握了使用BeautifulSoup4全方位解析爬取全国天气数据的方法啦!宝贝们棒棒滴!

上一篇:debug debug Unable to add window android.view.View--permission denied for this window type


下一篇:java中使用FIFO队列:java.util.Queue实现多台服务器发邮件的代码