Python爬虫——使用正则表达式爬取西安7天的天气预报,并使用prettytable模块输出

使用正则表达式爬取西安7天的天气预报

这个爬虫的案例就是对正则表达式的运用,通过这个案例,我们可以对正则表达式有更加深入的理解。

1. 信息来源:

天气网。  链接为:https://www.tianqi.com/xian/7

Python爬虫——使用正则表达式爬取西安7天的天气预报,并使用prettytable模块输出_第1张图片

2. 解析需要爬取的信息:

进入主页,我们可以看到如上图所示的信息,我们需要爬取的就是上图中的所有内容。

我们在主页中点击右键——>查看网页源代码——>找到对应的信息——>如图所示

Python爬虫——使用正则表达式爬取西安7天的天气预报,并使用prettytable模块输出_第2张图片

我们对上图所示的信息进行分析,可以发现:(匹配就得多试验,每个人的匹配方式可能不同,多尝试)

  • 日期可以通过正则表达式—— r'>(\d\d月\d\d日)<'  匹配到;
  • 星期可以通过正则表达式—— r'class="week">(.+)'  匹配到;
  • 空气质量可以通过正则表达式—— r'>(.{1,4})' 匹配到;
  • 天气可以通过正则表达式——  r'class="temp">(.{1,2})'匹配到;
  • 气温可以通过正则表达式—— r'class="txt">(.+)℃ ~ (.+)℃')匹配到;
  • 风级可以通过正则表达式—— r'class="txt">(.+)'匹配到;

3. 反爬措施:

我们会发现,刚开始爬取这个网站时,获取不到任何的信息,那是因为这个网站有反爬虫,所有我们需要做一些反爬虫的措施。

如下图所示:主页——>检查——>Network——>按照如下方式找到user-agent——加入到代码中即可。

Python爬虫——使用正则表达式爬取西安7天的天气预报,并使用prettytable模块输出_第3张图片

4. 代码如下: 

import requests
import re
from prettytable import PrettyTable

url='https://www.tianqi.com/xian/7'

#加入头部信息,防止反爬
headers={
"user-agent":'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6821.400 QQBrowser/10.3.3040.400',
'Host':'www.tianqi.com'
}
txt=requests.get(url,headers=headers).text

#用正则表达式解析每个信息
m1=re.compile(r'>(\d\d月\d\d日)<',re.S)
m2=re.compile(r'class="week">(.+)')
m3=re.compile(r'>(.{1,4})')
m4=re.compile(r'class="temp">(.{1,2})')
m5=re.compile((r'class="txt">(.+)℃ ~ (.+)℃'))
m6=re.compile(r'class="txt">(.+)')
m6_list=[]
for i in range(len(m6.findall(txt))):
    if i%2!=0:
        m6_list.append(m6.findall(txt)[i])
tianqi=[]
#将所有信息加入到列表中
for i in range(len(m1.findall(txt))):
    tianqi.append([m1.findall(txt)[i],m2.findall(txt)[i],m3.findall(txt)[i],m4.findall(txt)[i],m5.findall(txt)[i][0]+' ~ '+m5.findall(txt)[i][1],m6_list[i]])

print('西安7天天气预报'.center(55,'='))
#使用prettytable模块输出
ptable=PrettyTable('日期 星期 空气质量 天气 气温(C) 风级'.split())
for i in tianqi:
    ptable.add_row(i)
print(ptable)

结果如下:

Python爬虫——使用正则表达式爬取西安7天的天气预报,并使用prettytable模块输出_第4张图片

你可能感兴趣的:(python爬虫)