首页 > 编程语言 >python-爬取网站天气数据-1

python-爬取网站天气数据-1

时间:2024-11-19 10:18:25浏览次数:3  
标签:headers python 标签 爬取 网站 listall1 html response

一、选择一个网站,观察需要的内容位置

这次练手对象是一个2345网站天气数据,如下:

南京历史天气查询_历史天气预报查询_2345天气预报

这里面我想要获得的天气数据如上图,我需要将这些数据爬取下来并保存为本地文件。

二、查看代码,观察内容信息在代码中所处的位置

右键,选择查看源代码,复制网站显示内容直接在源代码里面查询,快速定位;

由上图看,定位的位置在td标签里面,在仔细看一下,不难发现我所需要的信息在ul和table标签下面,位置确定后就可以使用BeautSoup进行解析了。

三、使用requests和BeautifulSoup进行分析整理

1、利用requests对网站进行访问,获得响应

    headers = {自己的headers}
    response = requests.get(url, headers=headers)#headers最好弄上,大部分网站都有反爬虫机制,有这个进行模拟人登录,不会被网站拦截
    response.encoding=response.apparent_encoding
    print(response.status_code)
    return response.text

这个headers最好一块写上去,防止网站拦截,至于这个headers怎么获得,可以直接在网站右键,选择检查,如下:

 

这个动作就有点那种抓包的意思了,后面处理爬取动态网站的时候可能会用到;注意响应的编码,是不是真正的正确访问网站了。

2、结合前面确定的内容位置,利用BeautifSoup来定位分析

 我们可以利用class这个属性来获取内容

listrow = []#获取开头那个月度总结,但是不太好随日期一起写入文件,所以只是提取,后并未做处理
list1=[]#从这往下的几个定义的列表,都是相当于中转,最终只要listall3
listall=[]
listall1=[]
listall2=[]
listall3=[]
html=BeautifulSoup(demo,'html.parser')#对标签进行格式整理
l1=html.find_all(attrs={'class':'history-msg'})#所有需要的内容都在这个标签下面
for i in l1:
    listrow.append(i.text)#获取文本内容,去掉标签
    list1=html.find_all(attrs={'class':'history-table'})#单纯具体日期明细在这个标签下面
for i in list1:
    listall.append(i.text)#同上,获取文本,去掉标签
listall1=listall[0].replace(" ","").split("\n")#从这开始到后面,都是对提取的内容进行整理美化
print(listrow)
for i in range(len(listall1)):
    if len(listall1[i])!=0:
        listall2.append(listall1[i])
for i in range(int(len(listall2)/6)):#6个一行进行分行
    listall3.append(listall2[6*i:(6*(i+1)-1)])

提取到内容后,剩下的就是对内容进行格式方面的整理了,不作赘述

四、数据保存

数据啥的都处理好之后,看自己个人需求,要不要保存,保存到哪种格式文件下,我这里是保存到CSV表格中,借用pandas来处理:

tr=pd.DataFrame(listall3)#这开始就是保存到本地文件中,也可以借用open函数进行保存
tr.to_csv("C:\\Users\\YEER\\Desktop\\allin3.csv")

 然后输出完成,但是在输出到文件后,我发现他自带序号和列名,但是这个to_csv函数我也看了具体用法,设置列名的时候经常报错,我一时也没啥好办法,也就不管他了,也不影响我自己看和在文件中处理【笑哭】

最后,我发现那个天气时间是可以选择的,所以我想试着能不能实现爬取我需要的某年某月的天气,而且很明显能发现,之前的具体天气在上面的源代码里面是找不到的,所以需要我去学习一下爬取动态网站的知识了。

大概下午或者明天的时候,我把动态的爬取过程发过来,已做记录。

最后最后,附上完整代码:

import requests
from bs4 import BeautifulSoup
import pandas as pd

def geturl(url):#这个函数就是获取网站的整个内容,如果后面需要频繁访问网站的话,可以直接调用这个函数,如果只是访问一次,就没必要定义这个函数,可以直接撸代码
    headers = {"自己的header"}
    response = requests.get(url, headers=headers)#headers最好弄上,大部分网站都有反爬虫机制,有这个进行模拟人登录,不会被网站拦截
    response.encoding=response.apparent_encoding
    print(response.status_code)
    return response.text
#玩爬虫的时候,如果要频繁访问某个网站的话,最好设置等待或休息时间,一方面有利于网站内容加载,一方面对网站友好,加油,做一个优秀友好的爬虫人!
def gettxt(demo):
    listrow = []#获取开头那个月度总结,但是不太好随日期一起写入文件,所以只是提取,后并未做处理
    list1=[]#从这往下的几个定义的列表,都是相当于中转,最终只要listall3
    listall=[]
    listall1=[]
    listall2=[]
    listall3=[]
    html=BeautifulSoup(demo,'html.parser')#对标签进行格式整理
    l1=html.find_all(attrs={'class':'history-msg'})#总的天气概况在这个下面
    for i in l1:
        listrow.append(i.text)#获取文本内容,去掉标签,这个就是月度总天气概况,但是后面发现不太容易一块写入文件,所以只是爬取,后续未做处理
    list1=html.find_all(attrs={'class':'history-table'})#单纯具体日期明细在这个标签下面
    for i in list1:
        listall.append(i.text)#同上,获取文本,去掉标签
    listall1=listall[0].replace(" ","").split("\n")#从这开始到后面,都是对提取的内容进行整理美化
    print(listrow)
    for i in range(len(listall1)):
        if len(listall1[i])!=0:
            listall2.append(listall1[i])
    for i in range(int(len(listall2)/6)):#6个一行进行分行
        listall3.append(listall2[6*i:(6*(i+1)-1)])
    tr=pd.DataFrame(listall3)#这开始就是保存到本地文件中,也可以借用with-open格式进行保存
    tr.to_csv("自己的保存的文件地址")

def main():
    url="https://tianqi.2345.com/wea_history/58238.htm"
    r=geturl(url)
    gettxt(r)


main()

标签:headers,python,标签,爬取,网站,listall1,html,response
From: https://blog.csdn.net/ldjdjdk/article/details/143872918

相关文章

  • 基于Springboot社区闲置物品交换置换系统网站设计与实现(作品+论文+开题报告)
      博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩,提供核心代码讲解,答辩指导。项目配有对应开......
  • Python爬虫(爬取博客网为例)
    一、前言场景1:一个网络爬虫,顺序爬取一个网页花了一个小时,采用并发下载就减少到了20分钟。场景2:一个应用软件优化前每次打开网页需要3秒,采用异步并发提升到了200毫秒。假设一个工程的工作量为100,不采用并发编程就相当于由一个人去完成这个工作量为100的所有工作内容,可能需要1......
  • Python中的平方功能:方便实用的数据处理利器
    Python作为一门广泛应用于数据科学、机器学习和人工智能领域的编程语言,具有许多实用的功能。其中,Python中的平方功能是一个非常有用和实用的数据处理利器。简洁易用的语法Python中的平方功能使用的是**运算符,其语法为**数**,其中数可以是任意实数、整数或字符串。例如,要计......
  • Python用subprocess管理子进程在Windows平台实现平行效果
    在Python中,使用subprocess模块管理子进程时,如果你在Windows平台上尝试实现类似于Unix系统的“平行效果”(即父子进程可以同时运行),你可能会遇到一些问题。在Unix系统中,子进程是独立于父进程的,它们可以同时运行。但在Windows系统中,当你使用subprocess创建子进程时,默认情况下会存在父......
  • 《Python从入门到实践》第四章动手试一试
    4-1比萨:想出至少三种你喜欢的比萨,将其名称存储在一个列表中,再使用for循环将每种比萨的名称都打印出来。修改这个for循环,使其打印包含比萨名称的句子,而不仅仅是比萨的名称。对于每种比萨,都显示一行输出,如“Ilikepepperonipizza”。在程序末尾添加一行代码,它不在for循环中,指......
  • Python设计模式详解之1 —— 单例模式
    单例模式(SingletonPattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供全局访问点。单例模式适用于需要确保全局唯一实例的场景,例如配置管理、日志记录器、数据库连接等。1.单例模式的特点全局唯一性:在整个应用程序的生命周期内,单例类只能有一个实例。全局访问:......
  • Python设计模式详解之2 —— 工厂模式
    工厂模式(FactoryPattern)是一种创建型设计模式,旨在定义一个用于创建对象的接口,但由子类决定实例化哪个类。工厂模式可以帮助我们将对象的创建与其使用分离,增强代码的可扩展性和维护性。工厂模式的分类简单工厂模式(SimpleFactoryPattern)工厂方法模式(FactoryMethodPatte......
  • (免费源码)计算机毕业设计必看必学 原创定制程序 java、PHP、python、小程序、文案全套
    摘 要为了方便用户快速定位自己感兴趣的国内热门旅游景点信息,国内热门景点推荐系统应运而生。本系统的前端界面主要实现页面的美观和动态效果使之符合广大群众的审美观,后台主要使用的技术主要有Java编程语言,SSM框架,MySQL数据库的旅游推荐系统解决了传统旅游推荐方式中数据......
  • Python设计模式详解之3 —— 抽象工厂模式
    抽象工厂模式也是一种创建型设计模式,它提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。它特别适合在需要创建多个相关对象且这些对象在逻辑上属于一个“产品族”时使用。结构:抽象产品:定义了产品家族中每个产品的接口。具体产品:实现抽象产品接口......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
     摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认知向理性认知提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对医疗门诊管理......