python爬取网页的方法总结,python3.9爬取网页教程

2023-11-11

大家好,小编为大家解答python 爬取网页内容并保存到数据库的问题。很多人还不知道利用python爬取简单网页数据步骤,现在让我们一起来看看吧!

需求分析

今天遇到一个简单的需求,需要下载澳大利亚电力市场NEM日前市场的发电商报价数据(nemweb.com.au - /Reports/Current/Next_Day_Offer_Energy/),页面观感是这样的:

Ctrl + F 一下,看到一共有395个zip链接。于是就想着用python爬虫自动下载火车头采集器伪原创。这个网页很简单,没有验证码,甚至不需要登录,因此自动下载的python代码也很简单。

步骤

爬取链接主要是如下3步:

1. 第一步是爬取网页内容,保存在一个字符串content中

content的观感是这样的

从中可以看到链接是以'PUBLIC_NEXT_DAY_OFFER_ENERGY_(\d*)_(\d*).zip'的形式出现的,而且出现了两遍。

2. 第二步是构造正则表达式,从content中匹配下载链接

正则表达式构造为'(PUBLIC_NEXT_DAY_OFFER_ENERGY_(\d*)_(\d*).zip)',re.findall会返回一个三元tuple,分别是 (整个匹配到的字符串,第一个(\d*),第二个(\d*)). 由于上面提到了链接出现了两遍,所以可以用list转set来去重。

3. 第三步是遍历链接的set,下载链接

这一步就很trivial了,唯一要注意的是如果下载下来的文件所在的目录不存在,要提前作判断,建新目录。

结果

Done! 

源代码

"""
Created on Tue Nov 20 09:50:26 2018

@author: weiyx15

Automated downloading all data links from 
http://nemweb.com.au/Reports/Current/Next_Day_Offer_Energy/

"""
import urllib.request# url request
import re            # regular expression
import os            # dirs

# parent url
url = 'http://nemweb.com.au/Reports/Current/Next_Day_Offer_Energy/'

# regular expression
pattern = '(PUBLIC_NEXT_DAY_OFFER_ENERGY_(\d*)_(\d*).zip)'

# pull request
headers = {'User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'}
opener = urllib.request.build_opener()
opener.addheaders = [headers]
content = opener.open(url).read().decode('utf8')

# match regex and drop repetition
raw_hrefs = re.findall(pattern, content, 0)
hset = set(raw_hrefs)

# make directory
if not os.path.exists('./auto_download'):
    os.makedirs('auto_download')

# download links
for href in hset:
    link = url + href[0]
    print(link)
    urllib.request.urlretrieve(link, os.path.join('./auto_download', href[0]))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬取网页的方法总结,python3.9爬取网页教程 的相关文章

随机推荐

  • 使用Vagrant创建和管理本地Kubernetes(K8s)集群的步骤是什么

    文章目录 步骤1 准备环境 步骤2 创建Vagrantfile 步骤3 启动虚拟机 步骤4 安装Kubernetes 步骤5 配置Kubernetes网络插件 步骤6 将Worker节点加入集群 步骤7 验证集群 步骤8 部署应用 步骤9
  • 数据访问:MyBatis-Plus&Druid数据源

    数据访问 MyBatis Plus Druid数据源 SpringBoot集成MyBatis Plus MyBatis Plus简介 Lombok简介和安装 添加CRUD接口 分页插件 代码生成器 SpringBoot集成Druid数据源
  • Servlet的两个Map

    Servlet中第一个请求到达tomcat容器时 容器会对请求进行解析 去除 ip port context path 得到 uri web应用在启动时会创建这两个map 第一个map的value在初始时值都为空 第二个map在初始时值为s
  • 《概率论与数理统计》——概率公式

    1 逆事件公式 2 加法公式 3 减法公式 4 条件概率 设 A B 为任意事件 若 P A gt 0 我们称在已知事件 A 发生的条件下 事件 B 发生的概率为条件概率 记作 P B A 5 乘法公式 6 全概率公式 7 贝叶斯公式
  • 【代码随想录-刷题学习JavaScript】day4-字符串

    一 344 反转字符串 二 541 反转字符串II 三 剑指Offer 05 替换空格 四 151 翻转字符串里的单词 五 剑指Offer58 II 左旋转字符串 六 28 实现 strStr 七 459 重复的子字符串 八 字符串总结 九
  • Python安装数据库SqlServer\MySql访问组件

    首先要说明是基于Python3 6 3的 安装方法有所不同 以前网上说的一些方法试了基本没用 踩过了坑 现在列一下我的成功安装方法给坑友们 系统环境 win10企业版64位 开发环境 vs2015 Python版本 3 6 3 64位 一
  • redis执行日志_Redis之坑:Redis与MySQL中事务的区别

    MySQL BEGIN 显式地开启一个事务 COMMIT 提交事务 将对数据库进行的所有修改变成为永久性的 ROLLBACK 结束用户的事务 并撤销正在进行的所有未提交的修改 Redis MULTI 标记事务的开始 EXEC 执行事务的co
  • 单词统计(C语言)

    简述 输入一串英文字符串 统计出现的单词数目 流程图 原理简述 定义一个字符串数组char a 100 用于接收输入的字符串 输入字符串本处运用的gets 函数 作用是从终端输入一串字符到定义的字符数组中 函数返回值是数组地址 为方便表示
  • QT QTreeWidget 控件 学习笔记

    首先我们了解一下 QTreeWidget的属性 1 QTreeWidget 控件的创建 QTreeWidget tw 单独的树 QTreeWidget tw w 在w界面里的树 2 往tw中添加子节点 创建一个新结点 设置结点中包含的数据
  • Ubuntu:安装deb文件包

    sudo dpkg i deb 如果报依赖错误执行下面语句再试 sudo apt get f fix missing install
  • query和params传参的区别

    一 query和params传参的区别 1 query传递显示参数 params传递不显示参数 params相对于query来说较安全一点 取值方法也有不同 1 query取值 this r o u t e
  • ubuntu启动时黑屏,无法进入登录界面

    方式1 1 重新启动客户机 2 点击屏幕立即长按左shift键或ESC 3 出现grub菜单后选择第二个 4 又出现一个列表继续选择第二个 5 下一个页面选择第一个 6 下一个界面点击OK就可以了 但不能保证下次开机时能不能进入 方式2 在
  • django梳理

    概述 1 框架推导流程 web框架 Yietong309的博客 CSDN博客 前期准备知识 2 django请求生命周期流程图 客户端发送HTTP发送request请求 经过网关发送到中间件 在经过路由层 视图层 模型层 模板层 这两个都与
  • 鸿蒙-实践课程一 android、ios、HarmonyOS

    目前ide对于js调试还是如其它android ios一样 存在较多缺陷 config json配置导致中间调试的断层 建议初学者如果是java或者语言类转入 可以先用java语言进行学习 首先 你需要理清楚 Ability AceAbil
  • pygraphviz安装教程

    0x01 背景 最近在做casual inference 做实验时候想因果图可视化 遂需要安装pygraphviz 整了一下午 终于捣鼓好了 真头大 环境 win10操作系统 python3 9环境 在这里 如果有conda环境 直接可以使
  • 代码级测试

    代码级测试的测试方法一定是一套测试方法的集合 而不是一个测试方法 因为单靠一种测试方法不可能发现所有潜在的错误 一定是一种方法解决一部分或者一类问题 然后综合运用多种方法解决全部问题 常见代码错误类型 第一 语法特征错误 语法特征错误是指
  • 编写高质量代码:改善Java程序的151个建议(第8章:异常___建议110~117)

    不管人类的思维有多么缜密 也存在 智者千虑必有一失 的缺憾 无论计算机技术怎么发展 也不可能穷尽所有的场景 这个世界是不完美的 是有缺陷的 完美的世界只存在于理想中 对于软件帝国的缔造者来说 程序也是不完美的 异常情况会随时出现 我们需要它
  • 系统调用(int 0x80)详解

    1 系统调用初始化 在系统启动时 会在sched init void 函数中调用set system gate 0x80 system call 设置中断向量号0x80的中断描述符 define set system gate n addr
  • Python基础知识题库(带答案)

    单项选择题 第一章python语法基础 1 Python 3 x 版本的保留字总数是C A 27 B 29 C 33 D 16 2 以下选项中 不是 Python 语言保留字的是C A while B pass C do D except
  • python爬取网页的方法总结,python3.9爬取网页教程

    大家好 小编为大家解答python 爬取网页内容并保存到数据库的问题 很多人还不知道利用python爬取简单网页数据步骤 现在让我们一起来看看吧 需求分析 今天遇到一个简单的需求 需要下载澳大利亚电力市场NEM日前市场的发电商报价数据 ne