基于逻辑回归天气预报之爬虫1
项目:基于逻辑回归天气预报
项目简单介绍
数据来源: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:用户代理
-
请求头不构建之前
# 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)