1. import requests
    2. import csv
    3. import re
    4. url = 'http://www.weather.com.cn/weather/101270101.shtml'
    5. headers = {
    6. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36 Edg/100.0.1185.29'
    7. }
    8. res = requests.get(url, headers=headers)
    9. res.encoding = 'utf-8'
    10. html = res.text
    11. result = re.match(r'.*(<ul class="t clearfix">.*?</ul>).*', html, re.S) # 因为存在换行,所有要添加一个re.S 让它获取多行
    12. ul = result.group(1)
    13. lis = re.findall(r'<li.*?>.*?</li>', ul, re.S)
    14. pattern = re.compile(r'<li .*?>.*?<h1>(.*?)</h1>.*?<p .*?>(.*?)</p>.*?<span>(.*?)</span>/<i>(.*?)</i>.*?<i>(<.*?)</i>.*?</li>', re.S)
    15. lst = []
    16. for i in lis:
    17. r = pattern.match(i)
    18. if r:
    19. zu = (r.group(1), r.group(2), r.group(3)+'/'+r.group(4), r.group(5))
    20. lst.append(zu)
    21. with open('weather.csv', 'w', encoding='utf-8', newline='') as f:
    22. writer = csv.writer(f)
    23. writer.writerow(['日期', '天气', '温度'])
    24. writer.writerows(lst)