基于逻辑回归天气预报之爬虫1

发布时间 2023-07-03 18:58:00作者: 骨感的旅行者

项目:基于逻辑回归天气预报

项目简单介绍

数据来源:ETL(sqoop,Flume,datax,Cannal,Finkx),python爬虫(发送请求->响应请求->(HTML)->解析数据(Xpath,正则,bs4)-> 保存数据(文本文件,数据库)
数据分析:Spark做数据清洗(数据仓库,数据中台,数据湖)
数据可视化(BI):帆软(FineBl,FineReport,quickBl,DataV)
数据预测:基于现有天气得到天气质量模型,最后预测未来15天天气状况

1.Python爬虫

  • 对网页分类:静态网页,动态网页
    静态网页:网页内容一次性加载出来
    动态网页:局部加载
  • 分析url
    url是变化的:翻页怎么办:找到url变化规律
    url是不变的:翻页怎么办(selenium:自动化)
  • 解析请求
    xpath
    bs4
    正则
    *数据存储
    数据库

1.1.网络爬虫基础知识

  • 作用

    提取有价值的信息

    商业用途

    数据分析

  • 分类

    通用(robots 协议,君子协议),聚焦(大部分使用),增量式(增量式更新)网络爬虫

  • 爬虫速度慢解决

    多线程

  • 流程

    发送请求(re.get/post),响应请求,得到HTML,使用浏览器分析结构,使用正则,Beautifl Soup等提取数据,存储

  • 网页结构

    HTML

    CSS

    JavaScript

1.2静态,动态页面获取

  • 静态:可以直接通过get()获取,响应速度快,页面更新麻烦
  • 动态:不是一次性将所有页面内容加载出来,

1.3第一个爬虫程序

  • 要求:爬取百度页面信息

  • 获取html网页信息

#  1.导包
import urllib.request
# from urllib import request
#  2.发送请求
response = urllib.request.urlopen("http://www.baidu.com/")
# response = request.urlopen("http://www.baidu.com/")
#返回的是一个响应对象
print(response)
#结果:<http.client.HTTPResponse object at 0x0000020C1919B490>

#  3.获取百度首页html
# print(type(response.read()))
print(response.read().decode("utf-8"))
#返回状态码:200成功,404失败
print(response.getcode())
#返回请求的url
print(response.geturl())
  • 常用函数

urlopen(url,timeout):

​ 向网页发起请求,获得响应对象

​ url:网址,timeout:超时时间

Request (url,headers)

​ url:网址

​ headers:模仿浏览的,构建请求头包括(Agent(k,v),cookie)

read:html响应对象,返回byte类型

read().decode("utf-8"):html响应对象,返回Sting类型

getcode:返回状态码:200成功,404失败

geturl:返回请求的url

decode("utf-8"): 解码

encode("utf-8"): 编码

user-Agent:用户代理

image.png

  • 请求头不构建之前

    #  1.导包
    import urllib.request
    #  2.发送请求
    response = urllib.request.urlopen("http://httpbin.org/get")
    #返回的是一个响应对象
    print(response.read().decode("utf-8"))
    # "User-Agent": "Python-urllib/3.10"是个python爬虫解析器
    

    结果

    {
      "args": {}, 
      "headers": {
        "Accept-Encoding": "identity", 
        "Host": "httpbin.org", 
        "User-Agent": "Python-urllib/3.10", 
        "X-Amzn-Trace-Id": "Root=1-64a28b1a-423c0d5306da640e75219dc9"
      }, 
      "origin": "223.215.252.106", 
      "url": "http://httpbin.org/get"
    }
    
    
    Process finished with exit code 0
    
    
  • 请求头构建之后

    from urllib import request
    #定义请求头
    headers={'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67"}
    #定义url
    url="http://httpbin.org/get"
    
    req=request.Request(url=url,headers=headers)
    response = request.urlopen(req)
    print(response.read().decode("utf-8"))
    

    结果

    {
      "args": {}, 
      "headers": {
        "Accept-Encoding": "identity", 
        "Host": "httpbin.org", 
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67", 
        "X-Amzn-Trace-Id": "Root=1-64a2a5ec-5ac07de149468b8a326325e7"
      }, 
      "origin": "223.215.252.106", 
      "url": "http://httpbin.org/get"
    }
    
    
    Process finished with exit code 0
    
    
  • 构建请求池

    from fake_useragent import UserAgent
    #实例化一个对象
    ua=UserAgent() #随机获取一个ie浏览器ua
    print(ua.ie)
    print(ua.ie)
    #随机获取一个火狐浏览器ua
    print(ua.firefox)
    print(ua.firefox)