需求:从中国天气网爬取北京近七天的天气状况。

首先要进行网页分析
如图可以看到北京最近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爬虫爬取天气正则表达式解析案例相关推荐

  1. [python爬虫]爬取天气网全国所有县市的天气数据

    [python爬虫]爬取天气网全国所有县市的天气数据 访问URL 解析数据 保存数据 所要用到的库 import requests from lxml import etree import xlwt ...

  2. python爬虫爬取天气数据并图形化显示

    前言 使用python进行网页数据的爬取现在已经很常见了,而对天气数据的爬取更是入门级的新手操作,很多人学习爬虫都从天气开始,本文便是介绍了从中国天气网爬取天气数据,能够实现输入想要查询的城市,返回该 ...

  3. 高温来袭?通过python爬虫爬取天气预警信息

    需求分析 最近一段时间,天气也是越来越热了,真正的进入了夏天了.可怕的故事是,现在才只有6月份呢,要是等到了7,8月份,不会是要更热吧? 一个小伙伴对此也深表赞同,"仙草哥哥,现在天气的温度 ...

  4. python 爬虫爬取天气

    爬虫5步曲: 1.安装requests and beacutifulsoup4库 2.获取爬虫所需的header 和cookie 3.获取网页,解析网页 4.分析得到的数据简化地址 5.爬取内容,清洗 ...

  5. python爬取天气数据的header_[python爬虫]爬取天气网全国所有县市的天气数据

    def get_data(url): html = ask_url(url) base_url = 'http://www.weather.com.cn' province_name = []# 省份 ...

  6. 采用python爬虫爬取数据然后采用echarts数据可视化分析

    前言:采用python爬虫爬取天气数据然后采用echarts数据可视化画图分析未来天气变化趋势 从获取数据到可视化的流程 (熟悉爬虫爬取数据然后数据可视化这个过程) 一.python爬取未来8-15天 ...

  7. php抓取微博评论,python爬虫爬取微博评论案例详解

    前几天,杨超越编程大赛火了,大家都在报名参加,而我也是其中的一员. 在我们的项目中,我负责的是数据爬取这块,我主要是把对于杨超越 的每一条评论的相关信息. 数据格式:{"name" ...

  8. Python爬虫 爬取豆瓣电影TOP250

    Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...

  9. Python爬虫爬取美女写真实例

    Python爬虫爬取美女写真实例 微信关注公众号:夜寒信息 致力于为每一位用户免费提供更优质技术帮助与资源供给,感谢支持!     这是我写的一个较为简单的爬虫代码,用于爬取美女写真(咳咳,当然是正规 ...

最新文章

  1. Flume Channel
  2. (30)FPGA米勒型状态机设计(一段式)(第6天)
  3. 4.3 Siamese 网络
  4. 重磅! flutter视图局部更新
  5. tar 打包隐藏文件
  6. win7下chm打不开
  7. android 混淆报错记录
  8. sublime 实现浏览器预览功能
  9. Android Studio打造一个小说阅读App
  10. 胆囊息肉,需要切除吗
  11. java支付宝网站支付
  12. java计算机毕业设计漫画网站系统源码+系统+mysql数据库+lw文档
  13. HDMI介绍及硬件实现原理
  14. 从山西最年轻首富到中国第一败家子,李兆会的人生究竟有多魔幻?
  15. 怎样调用星图地球数据云的开发接口?
  16. 2015-910a-十-介于mink与maxk的结点数目
  17. 资讯|某搜索引擎推广企业定制化内训圆满成功
  18. C++ 单继承 父类和子类
  19. Tesseract: 训练(续)
  20. Android Studio 如何更改git账户

热门文章

  1. android 8 音质,2019安卓公认音质最好手机
  2. 计算机所有用户ev,EV屏幕共享(电脑屏幕共享助手)V1.0.1 免费版
  3. 使用Docker搭建高可用Mysql数据库集群
  4. Python 函数嵌套
  5. 采用开源程序pyAero批量生成高质量的多块翼型网格
  6. linux执行lsof命令_Linux操作系统上lsof命令详解
  7. 推荐8本高质量的Python书籍,初学者必看
  8. Android访问https链接
  9. WebAdmin管理平台首发
  10. matlab安装遇到的许可证问题