欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python爬虫之天气预报网站--查看最近(15天)的天气信息(正则表达式)

程序员文章站 2022-06-18 08:17:50
python爬虫之天气预报网站--查看最近(15天)的天气信息(正则表达式) 思路: 1.首先找到一个自己想要查看天气预报的网站,选择自己想查看的地方,查看天气(例:http://www.tianqi.com/xixian1/15/) 2.打开"网页源代码",分析自己想要获取数据的特点 3.运用正则 ......

python爬虫之天气预报网站--查看最近(15天)的天气信息(正则表达式)

思路:

1.首先找到一个自己想要查看天气预报的网站,选择自己想查看的地方,查看天气(例:http://www.tianqi.com/xixian1/15/)

2.打开"网页源代码",分析自己想要获取数据的特点

3.运用正则表达式来对数据进行处理,获得自己想要的数据   #网站可能反爬虫,需要绕过,这里用浏览器的代理(python默认的用户代理是自己,需要改成浏览器的用户代理,这样就能绕过一些网站简单的反爬虫)

4.获得数据后,对数据进行简单的美化

5.把数据写入文件(用pickle模块)

 

2.打开"网页源代码",分析自己想要获取数据的特点(不同网站的数据不同,需要具体问题具体分析)

python爬虫之天气预报网站--查看最近(15天)的天气信息(正则表达式)

3.1被网站禁止爬虫效果图如下:

python爬虫之天气预报网站--查看最近(15天)的天气信息(正则表达式)

3.2运用正则表达式来对数据进行处理,获得自己想要的数据 

代码如下:

查看天气预报
import re 
import requests
from prettytable import prettytable
url="http://www.tianqi.com/xixian1/15/"
#绕过网站反爬虫
txt=requests.get(url,headers={"user-agent":"mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/63.0.3239.132 safari/537.36","host":"www.tianqi.com"}).text
#print(txt)
s1=re.compile(r'<b>(\d\d月\d\d日)</b>')   #日期
print(s1.findall(txt))
s2=re.compile(r'<li class="temp">(.+) (-?\d+)(\w+)<b>(-?\d+)</b>℃</li>')
print(s2.findall(txt)) 
s3=re.compile('>(.{1,4})</b></li>')
print(s3.findall(txt))
s4=re.compile(r'<li>([\u4e00-\u9fa5].+)</li>')
print(s4.findall(txt))
tianqi=[]
for i in range(len(s1.findall(txt))):
    tianqi.append([s1.findall(txt)[i],s2.findall(txt)[i][0],s2.findall(txt)[i][1]+s2.findall(txt)[i][2]+s2.findall(txt)[i][3],s3.findall(txt)[i],s4.findall(txt)[i]])

print(tianqi)
ptable=prettytable('日期 天气 气温(℃) 空气质量 风级'.split())
for i in tianqi:
    ptable.add_row(i)
print(ptable)

运行效果如下:

python爬虫之天气预报网站--查看最近(15天)的天气信息(正则表达式)

 5.把数据写入文件(pickle)

代码如下:

import re 
import requests
import pickle
from prettytable import prettytable
url="http://www.tianqi.com/xixian1/15/"
#绕过网站反爬虫
#把内容写入到文件中(序列化)
try:
    with open("tianqi.txt","rb") as f:
        txt=pickle.load(f)
        print("结果已加载")
except:
    txt=requests.get(url,headers={"user-agent":"mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/63.0.3239.132 safari/537.36","host":"www.tianqi.com"}).text
    with open("tianqi.txt","wb") as f:
        pickle.dump(txt,f)
        print("文件已写入!")
#print(txt)
s1=re.compile(r'<b>(\d\d月\d\d日)</b>')   #日期
print(s1.findall(txt))
s2=re.compile(r'<li class="temp">(.+) (-?\d+)(\w+)<b>(-?\d+)</b>℃</li>')
print(s2.findall(txt)) 
s3=re.compile('>(.{1,4})</b></li>')
print(s3.findall(txt))
s4=re.compile(r'<li>([\u4e00-\u9fa5].+)</li>')
print(s4.findall(txt))
tianqi=[]
for i in range(len(s1.findall(txt))):
    tianqi.append([s1.findall(txt)[i],s2.findall(txt)[i][0],s2.findall(txt)[i][1]+s2.findall(txt)[i][2]+s2.findall(txt)[i][3],s3.findall(txt)[i],s4.findall(txt)[i]])

print(tianqi)
ptable=prettytable('日期 天气 气温(℃) 空气质量 风级'.split())
for i in tianqi:
    ptable.add_row(i)
print(ptable)