python爬蟲之天氣預報網站--查看最近(15天)的天氣信息(正則表達式)


python爬蟲之天氣預報網站--查看最近(15天)的天氣信息(正則表達式)

思路:

1.首先找到一個自己想要查看天氣預報的網站,選擇自己想查看的地方,查看天氣(例:http://www.tianqi.com/xixian1/15/)

2.打開"網頁源代碼",分析自己想要獲取數據的特點

3.運用正則表達式來對數據進行處理,獲得自己想要的數據   #網站可能反爬蟲,需要繞過,這里用瀏覽器的代理(python默認的用戶代理是自己,需要改成瀏覽器的用戶代理,這樣就能繞過一些網站簡單的反爬蟲)

4.獲得數據后,對數據進行簡單的美化

5.把數據寫入文件(用pickle模塊)

 

2.打開"網頁源代碼",分析自己想要獲取數據的特點(不同網站的數據不同,需要具體問題具體分析)

3.1被網站禁止爬蟲效果圖如下:

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)

運行效果如下:

 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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM