python xpath循环_Python爬取南京市往年天气预报,使用pyecharts进行分析

本次爬取的首页地址是:

http://www.tianqihoubao.com/lishi/nanjing.html

933b6e1f85635c099fa729884b639904.png

爬取步骤:

  • 爬取主网页,获取进入每个南京市具体年份月份的天气数据的链接
  • 爬取上方获取的具体链接的数据
  • 存储数据
  • 对数据进行筛选后使用pyecharts进行分析

开发工具:

  • Python版本:3.5.4
  • 相关模块:
import requestsfrom lxml import etreeimport timeimport csvfrom multiprocessing import Pool

使用演示:

  • 部分数据如下:
833334136a8c04b417f69f854d4e0d90.png
9a6d4ffde8a58e02617274c14875d72f.png
a3f1dfdb6e413fa0aa2eb2c863893c8a.png
78e9f070601ddd2160f658b605027bff.png
507d313b6feb436e4c60d279ce3f43a0.png

话不多说,马上开始吧!

  • 步骤一
08de4da8c01cbe2155b26051255984c8.png
  • 具体代码如下:
'''遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!'''def get_mainurl(url): #定义获取月份天气的详细url 函数 res = requests.get(url, headers=headers) main_url = [] if res.status_code == 200: #判断请求状态 selector = etree.HTML(res.text) htmlurls = selector.xpath('//div[contains(@id,"content")]/div') #循环点 try: for htmlurl in htmlurls: Jan = htmlurl.xpath('ul[1]/li[2]/a/@href')[0] #一月份天气url main_url.append(Jan) #将网址放入列表中,一个一个放是很蠢的方法,但我也确实不知道其他方法了,下同 Feb = htmlurl.xpath('ul[1]/li[3]/a/@href')[0] #二月份天气url main_url.append(Feb) Mar = htmlurl.xpath('ul[1]/li[4]/a/@href')[0] #同上,下类推 main_url.append(Mar) Apr = htmlurl.xpath('ul[2]/li[2]/a/@href')[0] main_url.append(Apr) May = htmlurl.xpath('ul[2]/li[3]/a/@href')[0] main_url.append(May) June = htmlurl.xpath('ul[2]/li[4]/a/@href')[0] main_url.append(June) July = htmlurl.xpath('ul[3]/li[2]/a/@href')[0] main_url.append(July) Aug = htmlurl.xpath('ul[3]/li[3]/a/@href')[0] main_url.append(Aug) Sep = htmlurl.xpath('ul[3]/li[4]/a/@href')[0] main_url.append(Sep) Oct = htmlurl.xpath('ul[4]/li[2]/a/@href')[0] main_url.append(Oct) Nov = htmlurl.xpath('ul[4]/li[3]/a/@href')[0] main_url.append(Nov) Dec = htmlurl.xpath('ul[4]/li[4]/a/@href')[0] main_url.append(Dec)​ time.sleep(0.5) #休眠0.5s except IndexError: pass return main_url #将存了所有url的列表返回 else: pass​​def link_url(url): #上面获取的url是不完整的,此函数使其完整 final_urls= [] list_urls = get_mainurl(url) for list_url in list_urls: if len(list_url) < 30: #因为获取的url有一些少了‘/lishi/’,所以需要判断一下 list_url = 'http://www.tianqihoubao.com/lishi/' + list_url final_urls.append(list_url) else: list_url = 'http://www.tianqihoubao.com' + list_url final_urls.append(list_url) return final_urls
  • 步骤二
  • 接下来是获取所需的数据,遍历所在节点就行了,需要注意的是要跳过第一个节点,因为其内部没有内容。

代码如下:

'''遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!'''def get_infos(detail_url): #爬取月份天气详细数据函数 main_res = requests.get(detail_url, headers=headers) main_sele = etree.HTML(main_res.text) main_infos = main_sele.xpath('//div[@class="hd"]/div[1]/table/tr') i = True try: for info in main_infos: if i: #此处i的作用是跳过第一次循环,因为第一个是非天气数据 i = False continue else: date = info.xpath('td[1]/a/text()')[0].replace(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值