函数式爬虫—天气信息爬取

介绍

本篇文章分享用pyhon实现函数式爬虫,爬取天气网站(http://www.tianqihoubao.com/)上的天气信息数据,并将清洗好的数据保存到本地。
共有link.py和main.py两个文件,可以去主页下载。

函数部分

首先,引入必要的函数库

import requests
import re
from bs4 import BeautifulSoup
import openpyxl as op

初始化爬虫,返回soup对象

# 初始化爬虫,运用beautifulsoup库返回一个soup
def first(header,urls,timeouts):
    res = requests.get(urls, headers=header,timeout=timeouts)
    res.encoding = 'gbk'
    soup = BeautifulSoup(res.text,'html.parser')
    return soup

这个函数是提取网页底部所有日期的链接,方便爬取所有日期的数据

# 返回所有要爬取的连接与月份名字
def link_obtain(soup):
    #filename = (soup.title.string.replace('\r','').replace('\n','').replace('\t','')).split('_')[2]
    hreflist = soup.find_all('div',class_='months')
    hreflist = str(hreflist).split('</a>')
    link = []
    other_name = []
    for i in range(len(hreflist)):
        bb = hreflist[i]
        link.append(bb[bb.find('href=') + 6:bb.find('title') -2])
        other_name.append(bb[bb.find('title') + 7:bb.find('天气') + 2])
    return link,other_name

使用soup中的find_all函数,定位tr,提取要爬取的数据部分

# 关键点的提取
def key_obtain(soup):
    tem_list = soup.find_all('tr')  
    return tem_list

将要提取的表格表头写入

# 每个城市数据文件的表头写入
def table_tag_write(tem_list,filename):
    wb = op.Workbook() # 创建工作薄对象
    ws = wb['Sheet'] # 创建子表 

    # 表头提取出来了
    table1 = re.findall(r'<td>\n[\s]*<b>(.*?)</b></td>',str(tem_list[0]))
    for oo in range(len(table1)):
        ws.cell(row=1,column = oo + 1).value = table1[oo] 
    wb.save(filename + '.xlsx') 
    return wb,ws

将表格中间的数据部分写入

# 数据文件中间部分的写入
def table_body_write(tem_list,local,filename):
    wb = op.load_workbook(filename + '.xlsx') # 打开MY_EXCEL.xlsx文件
    ws = wb.active # 激活工作区
    for i in range(1,len(tem_list)):
        time = str(tem_list[i].a.string).replace(' ','').replace('\n','')
        aa = (str(tem_list[i]).replace(' ','')).split("<td>")
        for j in range(len(aa)):
            aa[j] = aa[j].replace('\r','')
            aa[j] = aa[j].replace('\n','')
            aa[j] = aa[j].replace('</td>','')
            aa[j] = aa[j].replace('</tr>','')
        aa[1] = time
        aa = aa[1:]
        for k in range(len(aa)):
            ws.cell(row=local + i + 1,column=k+1).value = aa[k] # 将数据data写入excel中的第i行第j列
    local = local + len(tem_list)-1
    wb.save(filename + '.xlsx') # 保存excel表
    return local

主函数部分

主函数用来调用函数来实现爬取信息

# 这个是调用的爬虫主函数

import link

# 头
headers = {
       "referer": "https://www.baidu.com.com/",
       "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
   }



# 爬取南昌天气部分,要提取哪个城市只需要把城市的名字替换即可
url= 'http://www.tianqihoubao.com/lishi/nanchang/month/202001.html'
timeouts = 60 # 最大的加载时间
filename = "nanchang_weather_1" # 保存的文件名

# 这个部分是记录表头的
soup_link_changsha = link.first(headers,url,timeouts)
link_changsha = link.link_obtain(soup_link_changsha)[0]
other_name_changsha = link.link_obtain(soup_link_changsha)[1]
tem_list_changsha = link.key_obtain(soup_link_changsha)
link.table_tag_write(tem_list_changsha,filename)



local = 0
# 开始循环写入表的具体内容
try: 
   for kk in range(len(link_changsha)):
   #for kk in range(3):
       print(kk)
       url_kk = 'http://www.tianqihoubao.com' + link_changsha[kk]
       soup_changsha_kk = link.first(headers,url_kk,timeouts)
       tem_list_changsha_kk = link.key_obtain(soup_changsha_kk)


       local = link.table_body_write(tem_list_changsha_kk,local,filename)
except Exception as e: # 如果发生错误,就继续循环
   print('http://www.tianqihoubao.com' + link_changsha[kk])
   print(e)
   lim = kk +1
   for kk in range(lim,len(link_changsha)):
       #for kk in range(3):
       print(kk)
       url_kk = 'http://www.tianqihoubao.com' + link_changsha[kk]
       soup_changsha_kk = link.first(headers,url_kk,timeouts)
       tem_list_changsha_kk = link.key_obtain(soup_changsha_kk)


       local = link.table_body_write(tem_list_changsha_kk,local,filename)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python爬虫是一种用于从网页上获数据的技术。实时天气数据可以通过以下步骤实现: 1. 导入所需的库:首先,需要导入Python的requests库和BeautifulSoup库。Requests库用于发送HTTP请求,而BeautifulSoup库用于解析HTML页面。 2. 发送HTTP请求:使用requests库发送GET请求到天气数据的网站。可以使用城市名称或者经纬度作为参数来获相应城市的天气数据。 3. 解析HTML页面:使用BeautifulSoup库解析返回的HTML页面。可以使用CSS选择器或XPath来定位所需的天气数据。 4. 提天气数据:根据HTML页面的结构,提所需的天气数据。可以使用BeautifulSoup提供的方法来提标签内的文本内容。 5. 处理和展示数据:对提到的天气数据进行处理和展示。可以将数据保存到文件中或者通过其他方展示给用户。 以下是一个简单的示例代码,用于实时天气数据: ```python import requests from bs4 import BeautifulSoup def get_weather(city): url = f'https://www.weather.com.cn/weather/{city}.shtml' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36' } response = requests.get(url, headers=headers) response.encoding = 'utf-8' soup = BeautifulSoup(response.text, 'html.parser') weather = soup.find(class_='tem').text.strip() return weather city = '101010100' # 北京的城市代码 weather_data = get_weather(city) print(f"北京的实时天气为:{weather_data}") ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值