python爬取天气网的全国空气质量指数排行榜(使用正则表达式和Xpath方法)@★驱逐舰★
python爬取天气网的全国空气质量指数排行榜(使用正则表达式和Xpath方法
这是我的第二篇博客
目的
爬取天气网的全国空气质量指数排行榜,使用正则和Xpath两种方法进行爬取数据,输出得到的排行榜数据并将数据保存到EXCEL文件中。
代码
俗话说不提供代码就是流氓行为,这里先奉上代码~~
第一种方法:正则表达式方法
import requests
import re
import prettytable as pt #导入用以python以表格的形式输出的prettytable库
import xlwt #导入用以将数据保存到ECXEL文件中的xlwt库
#获取网页数据
url = 'http://www.tianqi.com/air/'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36sudaref: graph.qq.com'
}
response = requests.get(url=url,headers=headers)
result = response.content.decode('gbk')
#解析数据
data = re.findall('<li\sid=".*?"><span\sclass=.*?>(.*?)</span><span\sclass=".*?"><a\shref=.*?>(.*?)</a>.*?<span.*?>(.*?)</span>.*?<em.*?>(.*?)</em>',result,re.S)
#输出、保存数据
tb = pt.PrettyTable()
tb.field_names = ["排名", "城市", "空气质量指数", "质量状况"]
for i in range(len(data)):
tb.add_row([data[i][0],data[i][1],data[i][2],data[i][3]])
print(tb)
book = xlwt.Workbook(encoding='utf-8') #将其导入EXCEL表格中进行保存
sheet = book.add_sheet('sheet1')
my_data=["排名","城市","空气质量指数","质量状况"]
for i in range(0,4):
sheet.write(0,i,my_data[i])
for j in range(len(data)):
sheet.write(j+1,0,data[j][0])
sheet.write(j+1,1,data[j][1])
sheet.write(j+1,2,data[j][2])
sheet.write(j+1,3,data[j][3])
book.save('全国重点城市空气质量指数排行榜.xls')
将得到数据输出:
并将数据保存到EXCEL文件中:
第二种方法:Xpath方法
#xpath方法
import requests
from lxml import etree
import prettytable as pt #导入用以python以表格的形式输出的prettytable库
#获取网页数据
url = 'http://www.tianqi.com/air/'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36sudaref: graph.qq.com'
}
response = requests.get(url=url,headers=headers)
html = etree.HTML(response.text)
id_list = html.xpath('//div[@class="meta"]/ul/li/@id')
#解析数据
del(id_list[0]) #第0号元素无用,不是目标数据,将其删除
data = [] #建立一个新的列表存放最终数据
tb = pt.PrettyTable()
for i in range(len(id_list)):
j = id_list[i]
result = html.xpath('//div[@class="meta"]/ul/li[@id="%s"]/span/text()'%j) #获取排名和空气质量指数
city = html.xpath('//div[@class="meta"]/ul/li[@id="%s"]/span/a/text()'%j) #获取城市名
result.insert(1,city[0]) #将城市名插入到1号位置
quality = html.xpath('//div[@class="meta"]/ul/li[@id="%s"]/span/em/text()'%j) #获取质量状况
result.append(quality[0]) #将质量状况添加到result末尾
data.append(result) #通过for循环将所有result添加到data列表中
#输出、保存数据
tb.field_names = ["排名", "城市", "空气质量指数", "质量状况"]
for i in range(len(data)):
tb.add_row([data[i][0],data[i][1],data[i][2],data[i][3]])
print(tb)
#将其导入EXCEL表格中进行保存
import xlwt
book = xlwt.Workbook(encoding='utf-8')
sheet = book.add_sheet('sheet1')
my_data=["排名","城市","空气质量指数","质量状况"]
for i in range(0,4):
sheet.write(0,i,my_data[i])
for j in range(len(data)):
sheet.write(j+1,0,data[j][0])
sheet.write(j+1,1,data[j][1])
sheet.write(j+1,2,data[j][2])
sheet.write(j+1,3,data[j][3])
book.save('全国重点城市空气质量指数排行榜2.xls')
Xpath方法输出数据和保存到EXCEL文件效果相同,所以此处省略效果图。
总结:该网站没有较复杂的反爬虫机制,较为容易爬取,主要是需要对网页源代码的进行解析、数据的保存方法进行熟练掌握。