python爬虫爬取网页上的天气数据

2023-10-31

目录

一:获取网页重要信息

二:爬取网页数据

三:源码分享


一:获取网页重要信息

在要爬取数据信息的网页上,F12进入查看网页内容

二:爬取网页数据

1 导入模块

import requests
from bs4 import BeautifulSoup
import urllib.request
import random

2 设置header 防止403资源不可用

# 设置header 防止产生403forbidden
my_headers = [
    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14",
    "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)",
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11',
    'Opera/9.25 (Windows NT 5.1; U; en)',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
    'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)',
    'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12',
    'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',
    "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7",
    "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 "
]

3 抓取网页信息

# 抓取网页信息
def get_content(url, headers):
    random_header = random.choice(headers)
    req = urllib.request.Request(url)
    req.add_header("User-Agent", random_header)
    req.add_header("Host", "lishi.tianqi.com")
    req.add_header("Referer", "http://lishi.tianqi.com/")
    req.add_header("GET", url)

    content = urllib.request.urlopen(req).read()
    return content

4 抓取自己想要获取的数据信息,csv导出

# 三个月份天气的链接
urls = ["http://lishi.tianqi.com/wuhan/202210.html",
        "http://lishi.tianqi.com/wuhan/202211.html",
        "http://lishi.tianqi.com/wuhan/202212.html"]

file = open('weather.csv', 'w')
for url in urls:
    response = get_content(url, my_headers)
    soup = BeautifulSoup(response, 'html.parser')
    weather_list = soup.select('ul[class="thrui"]')

    for weather in weather_list:
        ul_list = weather.select('li')
        for ul in ul_list:
            li_list = ul.select('div')
            str = ""
            for li in li_list:
                str += li.string + ','
            file.write(str + '\n')
file.close()

测试:

运行程序后,生成csv,可以拷贝至桌面自己查看下是否成功爬取 

可以获取到网页上有关天气的数据信息

三:源码分享

import requests
from bs4 import BeautifulSoup
import urllib.request
import random

# 设置header 防止产生403forbidden
my_headers = [
    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14",
    "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)",
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11',
    'Opera/9.25 (Windows NT 5.1; U; en)',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
    'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)',
    'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12',
    'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',
    "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7",
    "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 "
]


# 抓取网页信息
def get_content(url, headers):
    random_header = random.choice(headers)
    req = urllib.request.Request(url)
    req.add_header("User-Agent", random_header)
    req.add_header("Host", "lishi.tianqi.com")
    req.add_header("Referer", "http://lishi.tianqi.com/")
    req.add_header("GET", url)

    content = urllib.request.urlopen(req).read()
    return content


# 三个月份天气的链接
urls = ["http://lishi.tianqi.com/wuhan/202210.html",
        "http://lishi.tianqi.com/wuhan/202211.html",
        "http://lishi.tianqi.com/wuhan/202212.html"]

file = open('weather.csv', 'w')
for url in urls:
    response = get_content(url, my_headers)
    soup = BeautifulSoup(response, 'html.parser')
    weather_list = soup.select('ul[class="thrui"]')

    for weather in weather_list:
        ul_list = weather.select('li')
        for ul in ul_list:
            li_list = ul.select('div')
            str = ""
            for li in li_list:
                str += li.string + ','
            file.write(str + '\n')
file.close()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫爬取网页上的天气数据 的相关文章

  • 使用 MongoDB 作为我们的主数据库,我应该使用单独的图数据库来实现实体之间的关系吗?

    我们目前正在为一家专业公司内部实施类似 CRM 的解决方案 由于存储信息的性质以及信息的不同值和键 我们决定使用文档存储数据库 因为它完全适合目的 在本例中我们选择 MongoDB 作为此 CRM 解决方案的一部分 我们希望存储实体之间的关
  • Python - 比较同一字典中的值

    我有一本字典 d Trump MAGA FollowTheMoney Clinton dems Clinton Stein FollowTheMoney Atlanta 我想删除字符串列表中的重复字符串 该字符串是键的值 对于这个例子 期望
  • 让 VoiceChannel.members 和 Guild.members 返回完整列表的问题

    每当我尝试使用 VoiceChannel members 或 Guild members 时 它都不会提供适用成员的完整列表 我从文本命令的上下文中获取 VoiceChannel 和 Guild 如下所示 bot command name
  • 计算另一个字符串中多个字符串的出现次数

    在 Python 2 7 中 给定以下字符串 Spot是一只棕色的狗 斑点有棕色的头发 斑点的头发是棕色的 查找字符串中 Spot brown 和 hair 总数的最佳方法是什么 在示例中 它将返回 8 我正在寻找类似的东西string c
  • 如何在 __init__ 中使用await设置类属性

    我如何定义一个类await在构造函数或类体中 例如我想要的 import asyncio some code class Foo object async def init self settings self settings setti
  • 如何从Python中的函数返回多个值? [复制]

    这个问题在这里已经有答案了 如何从Python中的函数返回多个变量 您可以用逗号分隔要返回的值 def get name you code return first name last name 逗号表示它是一个元组 因此您可以用括号将值括
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • Pycharm 在 os.path 连接上出现“未解析的引用”

    将pycharm升级到2018 1 并将python升级到3 6 5后 pycharm报告 未解析的引用 join 最新版本的 pycharm 不会显示以下行的任何警告 from os path import join expanduser
  • 打印数字时添加千位分隔符[重复]

    这个问题在这里已经有答案了 我真的不知道这个问题的 名称 所以它可能是一个不正确的标题 但问题很简单 如果我有一个数字 例如 number 23543 second 68471243 我想要它使print 像这样 23 54368 471
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • 如何将特定范围内的标量添加到 numpy 数组?

    有没有一种更简单 更节省内存的方法可以单独在 numpy 中执行以下操作 import numpy as np ar np array a l r ar c a a 0 l ar tolist a r 它可能看起来很原始 但它涉及获取给定数
  • 为什么一旦我离开内置的运行服务器,Django 就无法找到我的管理媒体文件?

    当我使用内置的简单服务器时 一切正常 管理界面很漂亮 python manage py runserver 但是 当我尝试使用 wsgi 服务器为我的应用程序提供服务时django core handlers wsgi WSGIHandle
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • 当字段是数字时怎么说...在 mongodb 中匹配?

    所以我的结果中有一个名为 城市 的字段 结果已损坏 有时它是一个实际名称 有时它是一个数字 以下代码显示所有记录 db zips aggregate project city substr city 0 1 sort city 1 我需要修
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size

随机推荐

  • 哈夫曼树的应用

    温馨提示 这篇文章是基于哈夫曼树的构建之上 来说说哈夫曼树的应用 强烈建议在学习http 124 222 190 191 8090 archives E5 93 88 E5 A4 AB E6 9B BC E6 A0 91 E7 9A 84
  • 滤波电容计算举例

    例 输入电压220VAC 功率4W 要求输出电压波动不超过5 试计算滤波电容容量 解 1 电容的储能公式为 Wc 1 2CU 2 当电容充电到峰值电压 即220x1 414 310V 时 电容储存能量最大为 Wc max 1 2CU 2 0
  • 点估计(矩估计法和最大似然估计法)

    估计即是近似地求某个参数的值 需要区别理解样本 总体 量 值 大致的题型是已知某分布 其实包含未知参数 从中取样本并给出样本值 我只是一个初学者 可能有的步骤比较繁琐 请见谅 1 矩估计法 做题步骤 1 E x 求总体均值 一般含有未知参数
  • 为什么需要自动化测试?软件测试师带你测评不同软件测试工具

    软件从桌面转移到了我们接触到的几乎所有东西 从智能恒温器到输液泵再到汽车 软件无孔不入 而且在不断增长 来自物联网 IoT 的所谓 东西 越来越多地携带更多的逻辑 随之而来的是更大的故障风险 这些设备中的许多被用于安全关键领域 如医疗和汽车
  • 在Windows上使用gcc编译器

    在Windows上使用gcc编译器 第一步 安装QT 第二步 找到qt文件夹下的bin目录 如下所示 第三步 将该目录配置到环境变量中 第四步 打开cmd 输入gcc v 出现下面的图片证明gcc配置成功 第五步 编写一个 c文件进行测试
  • web前端技术笔记(十三)jQuery动画、jquery事件

    jQuery jquery动画 滑动选项卡案例 尺寸相关 滚动事件 加入购物车案例 菜单吸顶案例 jquery属性操作 jquery循环 手风琴格局案例 jquery事件 绑定事件的其他方式 取消绑定事件 事件冒泡 什么是事件冒泡 事件冒泡
  • 使用poi-ooxml-full.jar包过程中出现的版本问题

    先看报错信息 Exception in thread main org apache poi ooxml POIXMLException org apache logging log4j Logger atTrace Lorg apache
  • 数字政府2.0时代来临!阿里胜算几何?

    科技行业有一个共识 第三方数据机构的报告 C端看QuestMobile B端看IDC 在云计算市场 IDC的报告就是一种权威 日前 IDC发布的 中国数字政府大数据市场份额2018 报告显示 随着数字政府建设不断推进 2018年中国数字政府
  • Java : 方法 PrintStream.println(Object)不适用 (实际参数列表和形式参数列表长度不同)

    报错原因 之前一直使用python 用 习惯了 在Java中 应该作为String类型才能被识别 不能直接使用 连接两个变量 贴报错代码和修改之后的代码 public class Operator public static void ma
  • WIN10登陆时出现“被引用的帐户当前被锁定且可能无法登录”,如何解决?

    解决方法 一旦遇到 被引用的帐户当前被锁定且可能无法登录 错误 建议离开PC 30分钟 这是一个等待时间 通常由系统管理员设置 如果用户输入了错误的密码 等待30分钟后 登录屏幕可能会解锁 您可能有第二次机会访问桌面 如果您已成功访问桌面
  • 文献按时间排序_论文参考文献详解~

    论文参考文献标注方法一般是顺序编码制 顺序编码制 Numerical References Method 是一种文后参考文献的标注体系 即引文采用序号标注 参考文献按引文的序号排序 在论文中的引用处以右上标 小四宋体 加方括号的方式表示 不
  • Android Bluetooth AVRCP

    本篇blog继续以结合日志的形式来分析AVRCP 以手机连接上耳机后 通过耳机控制音乐播放的暂停 播放来分析AVRCP的过程 1 AVRCP 本章基于A V Remote Control Profile 1 6 2 Bluetooth Te
  • Python Spyder 调出缩进对齐线

    初学python 对python的对齐很重视 为了防止出错 使用spyder工具提供的功能 下面是方法 1 首先打开Tools菜单栏下的Preferences 出现如下界面 轻松1 2 3步之后就可以发现有 当然 红色的矩形框是我自己通过画
  • 2022年Android面经分享,准备Android面试

    前言 前几天一个多年的朋友和我聊天 说他被公司裁员了 我听了非常吃惊 我这个朋友之前在一家著名的外企公司已经工作10年以上了 级别也还不错 算是中高层了 前几年创业最火爆的时候 我和其他人想拉这位朋友出来一起干 怎么诱惑 怎么画大饼他都不动
  • Ubuntu18.04安装cuda10以及cuda版本的opencv3.4.13

    目录 一 cuda 二 cuda版本的Opencv3 4 13 一 cuda 首先提前安装好显卡驱动 在软件与更新 附加驱动里面直接安装即可 这个很简单 不再赘述 查看自己应该安装的版本CUDA 12 0 Update 1 Release
  • html返回200错误,http – 为什么在404错误页面上有200 OK标题状态是不是很糟糕?...

    我有一个问题我遇到了麻烦 err404页面的200OK标题状态问题 虽然它应该是404标题 200好有什么问题 真有可能200 OK应该在404错误页面标题状态 感谢建议 非常感谢 我想它与 htaccess有关 这是我的 htaccess
  • 报错:Cannot read properties of undefined (reading ‘commit‘)

    上传头像的时候出现了这样的报错 根据代码的反应锁定应该是上传vuex方法的问题 找出问题的方法 打印 this update avatar 发现是undefined 打印this 发现属性中没有 route方法 然后搜索main js发现没
  • Docker的基本操作2

    CSDN话题挑战赛第2期 参赛话题 学习笔记 个人名片 博主 酒徒 个人简介 沉醉在酒中 借着一股酒劲 去拼搏一个未来 本篇励志 三人行 必有我师焉 本项目基于B站黑马程序员Java SpringCloud微服务技术栈 SpringClou
  • realEngine(UE4)实现开关门效果

    UE4系列文章目录 文章目录 UE4系列文章目录 前言 一 制作步骤 注意 前言 虚幻引擎4是一个游戏开发工具的集合 能够生成从2D移动游戏到AAA控制台游戏的一切 它是 方舟 生存进化 铁拳7 和 王国之心III 等游戏的引擎 玩家熟知的
  • python爬虫爬取网页上的天气数据

    目录 一 获取网页重要信息 二 爬取网页数据 三 源码分享 一 获取网页重要信息 在要爬取数据信息的网页上 F12进入查看网页内容 二 爬取网页数据 1 导入模块 import requests from bs4 import Beauti