‘’’
    爬取天气案例
    需求:爬取近7天的天气(日期, 天气, 温度, 风向风力, 空气质量)
    url: https://tianqi.2345.com/today-51463.htm(乌鲁木齐近7天的天气预报)
    (查看网页源码:查找:今天,在源码上找到了,所以上面的url就是今天的目标url)
    步骤:
    1)获取整个网页源码
    2)获取url数据
    3)在ul数据里面找li数据
    4)在li数据提取 :日期, 天气, 温度, 风向风力, 空气质量
    5)保存到CSV文件里
    ‘’’

    1. import requests
    2. import re
    3. import csv
    4. url = 'https://tianqi.2345.com/today-51463.htm'
    5. # headers = {
    6. # 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
    7. # }
    8. #发请求,获取响应
    9. res = requests.get(url)
    10. # 给定编码,以解析成功
    11. res.encoding = 'utf-8'
    12. html = res.text
    13. # print(html),打印一下,看看是不是我想要的网页内容
    14. #用re.match方法,把内容这一块缩小
    15. result = re.match(r'.*(<div class="seven-day">.*?</div>).*', html, re.S)
    16. # print(result)
    17. ul = result.group(1)
    18. # print(ul)
    19. lis = re.findall(r'<a.*?>.*?</a>', ul, re.S)
    20. # print(lis[0]),打印一下,看看成功了没有
    21. obj = re.compile(r'.*?<em>(.*?)</em>.*?<i>(.*?)</i>.*?"tem-show">(.*?)</span>.*?<span.*?>(.*?)</span>.*?<span.*?>(.*?)</span>.*?', re.S)
    22. # 创建空列表来存储数据
    23. data = []
    24. #用循环来遍历列表元素,再通过re.compile来提取想要的数据
    25. for i in lis:
    26. r = obj.search(i)
    27. data.append((r.group(1), r.group(2), r.group(3), r.group(4), r.group(5)))
    28. #写入csv文件
    29. with open('weather_2345.csv', 'w', encoding='utf-8', newline='') as f:
    30. # 创建写入对象
    31. writer = csv.writer(f)
    32. # 写入表头
    33. writer.writerow(["日期", "天气", "温度", "风向风力", "空气质量"])
    34. writer.writerows(data)

    总结一下用正则爬的步骤:

    1. 1)先用 re.match方法,把数据缩小到一小块(其中用到括号()这分组,所以要带上group(1)取值.
    2. 2)再用 re.findall方法,求出一连串的数据,保存在列表中
    3. 3)最后用 re.compile方法,用循环从列表中取出数据通过 re.compile方法 取出所要的数据

    最后附上(weather_2345.csv文件内容)

    1. 日期,天气,温度,风向风力,空气质量
    2. 03/27,多云转小雨,3~10°,东南风4级,优
    3. 03/28,多云转晴,1~8°,北风2级,优
    4. 03/29,晴转小雨,0~11°,北风2级,优
    5. 03/30,大雪转晴,-3~4°,西北风2级,优
    6. 03/31,晴,-4~8°,北风2级,优
    7. 04/01,晴,-4~12°,东南风3级,优
    8. 04/02,阴,2~17°,东风3级,优
    9. 04/03,阴转晴,2~15°,西北风2级,优