python爬虫爬取天气正则表达式解析案例
需求:从中国天气网爬取北京近七天的天气状况。
首先要进行网页分析
如图可以看到北京最近7天天气,明天为晴,温度为-7℃到3℃,风力为<3级。
查看网页源码,发现可以从中找到这一数据
于是可以确定,此网页上方的url
http://www.weather.com.cn/weather/101010100.shtml
即为我们要访问的目标url。
然后对该url发起请求。并对得到的源码进行解析。
def get_Source(self):url = "http://www.weather.com.cn/weather/101180101.shtml"headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36',}response = requests.get(url, headers=headers)return response.content.decode('utf-8')content = self.get_Source()
如图可以看出,需要的数据在
- 与
之间。
则正则表达式写为:
result = re.match(r'.*?(<ul class="t clearfix">.*?</ul>).*?', content, re.S)
ul = result.group(1)
re.S必须要有,表示使用点(.)字符匹配时匹配所有字符,包括换行符。没有的这个参数话则只会从第一行中匹配。
与括号内匹配的内容,是我们需要的内容。也是该行代码返回的内容。
取出<ul>后,可以看出七天的天气分别分布在7个<li>标签里。遂使用findall()方法将其全部取出。
写正则表达式:
lis = re.findall(r'<li.*?>.*?</li>', ul, re.S)
for li in lis:print('-'*100)print(li)
输出结果如下:
再进一步解析
不过是需要的内容,还是不需要的不确定的无规律内容,都有点星问表示。
pattern = re.compile(r'<li.*?>.*?<h1>(.*?)</h1>.*?<p.*?>(.*?)</p>.*?<i>(.*?)</i>.*?<i>(.*?)</i>.*?</li>', re.S)
for li in lis:r = pattern.match(li)print(r.group(1), end='')print(r.group(2), end='')print(r.group(3), end='')print(r.group(4), end='')print()
细节:此处第二个点星问表示匹配换行,不能忽略。虽然
- 与
之间容易觉得没有任何内容。
程序运行结果如下:
(其中,print()后边的end参数社会空字符表示不换行,下边的print()里边什么也不放表示换行。)
最后,外加存储过程,一起写为面向对象形式为:
import requests import csv import reclass WeatherSpider():# 发送请求函数def get_Source(self):url = "http://www.weather.com.cn/weather/101180101.shtml"headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36',}response = requests.get(url, headers=headers)return response.content.decode('utf-8')# 解析数据函数def parse_Source(self):content = self.get_Source()# 经过分析 需要获取到目标ul标签result = re.match(r'.*?(<ul class="t clearfix">.*?</ul>).*?', content, re.S)ul = result.group(1)# 获取li标签lis = re.findall(r'<li.*?">.*?</li>', ul, re.S)pattern = re.compile(r'<li.*?>.*?<h1>(.*?)</h1>.*?<p.*?>(.*?)</p>.*?<i>(.*?)</i>.*?<i>(.*?)</i>.*?</li>', re.S) # 第二个 .*? 表示换行了。lst_all = [] # 保存所有的天气# 解析li的数据for li in lis:# print('-'*100)# print(li)r = pattern.match(li)# print(r.group(1), end='')# print(r.group(2), end='')# print(r.group(3), end='')# print(r.group(4), end='')# print()lst_one = [r.group(1), r.group(2), r.group(3), r.group(4)]lst_all.append(lst_one)return lst_all# 保存文件def saveDate(self):# 获取数据content = self.parse_Source()with open('weather.csv', 'w', encoding='utf-8', newline='') as f:writer = csv.writer(f)writer.writerow(['日期', '天气', '温度', '风度'])writer.writerows(content)def main():weather = WeatherSpider()weather.saveDate()if __name__ == '__main__':main()
python爬虫爬取天气正则表达式解析案例相关推荐
- [python爬虫]爬取天气网全国所有县市的天气数据
[python爬虫]爬取天气网全国所有县市的天气数据 访问URL 解析数据 保存数据 所要用到的库 import requests from lxml import etree import xlwt ...
- python爬虫爬取天气数据并图形化显示
前言 使用python进行网页数据的爬取现在已经很常见了,而对天气数据的爬取更是入门级的新手操作,很多人学习爬虫都从天气开始,本文便是介绍了从中国天气网爬取天气数据,能够实现输入想要查询的城市,返回该 ...
- 高温来袭?通过python爬虫爬取天气预警信息
需求分析 最近一段时间,天气也是越来越热了,真正的进入了夏天了.可怕的故事是,现在才只有6月份呢,要是等到了7,8月份,不会是要更热吧? 一个小伙伴对此也深表赞同,"仙草哥哥,现在天气的温度 ...
- python 爬虫爬取天气
爬虫5步曲: 1.安装requests and beacutifulsoup4库 2.获取爬虫所需的header 和cookie 3.获取网页,解析网页 4.分析得到的数据简化地址 5.爬取内容,清洗 ...
- python爬取天气数据的header_[python爬虫]爬取天气网全国所有县市的天气数据
def get_data(url): html = ask_url(url) base_url = 'http://www.weather.com.cn' province_name = []# 省份 ...
- 采用python爬虫爬取数据然后采用echarts数据可视化分析
前言:采用python爬虫爬取天气数据然后采用echarts数据可视化画图分析未来天气变化趋势 从获取数据到可视化的流程 (熟悉爬虫爬取数据然后数据可视化这个过程) 一.python爬取未来8-15天 ...
- php抓取微博评论,python爬虫爬取微博评论案例详解
前几天,杨超越编程大赛火了,大家都在报名参加,而我也是其中的一员. 在我们的项目中,我负责的是数据爬取这块,我主要是把对于杨超越 的每一条评论的相关信息. 数据格式:{"name" ...
- Python爬虫 爬取豆瓣电影TOP250
Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...
- Python爬虫爬取美女写真实例
Python爬虫爬取美女写真实例 微信关注公众号:夜寒信息 致力于为每一位用户免费提供更优质技术帮助与资源供给,感谢支持! 这是我写的一个较为简单的爬虫代码,用于爬取美女写真(咳咳,当然是正规 ...
最新文章
- Flume Channel
- (30)FPGA米勒型状态机设计(一段式)(第6天)
- 4.3 Siamese 网络
- 重磅! flutter视图局部更新
- tar 打包隐藏文件
- win7下chm打不开
- android 混淆报错记录
- sublime 实现浏览器预览功能
- Android Studio打造一个小说阅读App
- 胆囊息肉,需要切除吗
- java支付宝网站支付
- java计算机毕业设计漫画网站系统源码+系统+mysql数据库+lw文档
- HDMI介绍及硬件实现原理
- 从山西最年轻首富到中国第一败家子,李兆会的人生究竟有多魔幻?
- 怎样调用星图地球数据云的开发接口?
- 2015-910a-十-介于mink与maxk的结点数目
- 资讯|某搜索引擎推广企业定制化内训圆满成功
- C++ 单继承 父类和子类
- Tesseract: 训练(续)
- Android Studio 如何更改git账户