爬取w3c课程—Urllib库使用

爬虫原理

      浏览器获取网页内容的步骤:浏览器提交请求、下载网页代码、解析成页面,爬虫要做的就是:

  1. 模拟浏览器发送请求:通过HTTP库向目标站点发起请求Request,请求可以包含额外的header等信息,等待服务器响应
  2. 获取响应内容:如果服务器正常响应,会得到一个响应Response,响应的内容便是所要获取的页面内容,类型可能是HTML,Json字符串,二进制数据(图片或者视频)等
  3. 解析响应内容:获取响应内容后,解析各种数据,如:解析html数据:正则表达式,第三方解析库,解析json数据:json模块,解析二进制数据:进一步处理或以wb的方式写入文件
  4. 保存数据:保存为文本,数据库,或者保存特定格式的文件

简单例子:利用Urllib库爬取w3c网站教程

1、urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应:例如,对百度的一个w3c发送一个GET请求,并返回响应:

# coding:utf-8
import urllib.requestmy_url='https://www.w3cschool.cn/tutorial'#要获取课程的网址
page = urllib.request.urlopen(my_url)
html = page.read().decode('utf-8')
print(html)

发送一个GET请求到指定的页面,返回HTTP的响应写成一个函数:

 

def get_html(url):#访问urlpage = urllib.request.urlopen(url)html = page.read().decode('utf-8')return html

 

将返回如下内容,这与在浏览器查看源码看到的是一样的,接下来可以根据返回的内容进行解析:

2、利用正则表达式的分组提取课程名称、课程简介、课程链接,导入python里面的re库

reg = r'<a href="([\s\S]*?)" title=[\s\S]*?<h4>(.+)</h4>\n<p>([\s\S]*?)</p>'#运用正则表达式,分组提取数据
reg_tutorial = re.compile(reg)#编译一下正则表达式,运行更快
tutorial_list = reg_tutorial.findall(get_html(my_url))#进行匹配,

到现在代码如下:

# coding:utf-8
import urllib.request
import remy_url='https://www.w3cschool.cn/tutorial'#要获取课程的网址def get_html(url):#访问urlpage = urllib.request.urlopen(url)html = page.read().decode('utf-8')return htmlreg = r'<a href="([\s\S]*?)" title=[\s\S]*?<h4>(.+)</h4>\n<p>([\s\S]*?)</p>'#运用正则表达式,分组提取数据
reg_tutorial = re.compile(reg)#编译一下正则表达式,运行更快
tutorial_list = reg_tutorial.findall(get_html(my_url))#进行匹配print("一共有课程数:" + str(len(tutorial_list)))#打印出有多少课程for i in range(len(tutorial_list)):#把课程名称、课程简介、课程链接写到excel,python里面excel从0开始计算print (tutorial_list[i])

运行,打印结果:

3、保存数据,保存数据到excel里面,用到excel第三方库xlwt,也可以只用openpyxl,库的使用可以参照官网:http://www.python-excel.org/

本次需要新建一个Excel,把课程名称、课程简介、课程链接写到Excel里面,课程链接用xlwt.Formula设置超链接,Excel第一行设置为宋体,加粗,写一些课程内容外的东西

import xlwt
excel_path=r'tutorial.xlsx'#excel的路径
book = xlwt.Workbook(encoding='utf-8', style_compression=0)# 创建一个Workbook对象,这就相当于创建了一个Excel文件
sheet = book.add_sheet('课程',cell_overwrite_ok=True)# 添加表
style = xlwt.XFStyle()#初始化样式
font = xlwt.Font()#创建字体
font.name = '宋体'#指定字体名字
font.bold = True#字体加粗
style.font = font#将该font设定为style的字体
sheet.write(0, 0, '序号',style)#用之前的style格式写第一行,行、列从0开始计算
sheet.write(0, 1, '课程',style)
sheet.write(0, 2, '简介',style)
sheet.write(0, 3, '课程链接',style)

写课程内容到Excel

for i in range(len(tutorial_list)):#把课程名称、课程简介、课程链接写到excel,python里面excel从0开始计算print (tutorial_list[i])sheet.write(i+1, 0, i+1)sheet.write(i+1, 1, tutorial_list[i][1])sheet.write(i+1, 2, tutorial_list[i][2])sheet.write(i+1, 3, xlwt.Formula("HYPERLINK(" +'"'+"https:" + tutorial_list[i][0]+'"'+')'))#把链接写进去,并用xlwt.Formula设置超链接
    
book.save(excel_path)#保存到excel

 

Excel内容:

全部代码如下:

# coding:utf-8
import urllib.request
import re
import xlwt
excel_path=r'tutorial.xlsx'#excel的路径
my_url='https://www.w3cschool.cn/tutorial'#要获取课程的网址
book = xlwt.Workbook(encoding='utf-8', style_compression=0)# 创建一个Workbook对象,这就相当于创建了一个Excel文件
sheet = book.add_sheet('课程',cell_overwrite_ok=True)# 添加表
style = xlwt.XFStyle()#初始化样式
font = xlwt.Font()#创建字体
font.name = '宋体'#指定字体名字
font.bold = True#字体加粗
style.font = font#将该font设定为style的字体
sheet.write(0, 0, '序号',style)#用之前的style格式写第一行,行、列从0开始计算
sheet.write(0, 1, '课程',style)
sheet.write(0, 2, '简介',style)
sheet.write(0, 3, '课程链接',style)def get_html(url):#访问urlpage = urllib.request.urlopen(url)html = page.read().decode('utf-8')return htmlreg = r'<a href="([\s\S]*?)" title=[\s\S]*?<h4>(.+)</h4>\n<p>([\s\S]*?)</p>'#运用正则表达式,分组提取数据
reg_tutorial = re.compile(reg)#编译一下正则表达式,运行更快
tutorial_list = reg_tutorial.findall(get_html(my_url))#进行匹配print("一共有课程数:" + str(len(tutorial_list)))#打印出有多少课程for i in range(len(tutorial_list)):#把课程名称、课程简介、课程链接写到excel,python里面excel从0开始计算print (tutorial_list[i])sheet.write(i+1, 0, i+1)sheet.write(i+1, 1, tutorial_list[i][1])sheet.write(i+1, 2, tutorial_list[i][2])sheet.write(i+1, 3, xlwt.Formula("HYPERLINK(" +'"'+"https:" + tutorial_list[i][0]+'"'+')'))#把链接写进去,并用xlwt.Formula设置超链接
    
book.save(excel_path)#保存到excel

 

转载于:https://www.cnblogs.com/fish-dream/p/10560010.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于SSL证书配置、升级的一些问题总结

SSL会成为网站、APP、小程序&#xff08;小程序已经强制使用https&#xff09;等项目的标配。关于SSL证书安装使用的问题今天总结下&#xff0c;以备用。 环境配置&#xff1a;windows server 2008 R2和IIS7.0 1、 安装SSL证书的环境 (温馨提示&#xff1a;安装证书前请先备份…

如何为JBoss Developer Studio 8设置集成和SOA工具

最新的JBoss Developer Studio&#xff08;JBDS&#xff09;的发布带来了有关如何开始使用尚未安装的各种JBoss Integration和BPM产品工具集的问题。 在本系列文章中&#xff0c;我们将为您概述如何安装每套工具并说明它们支持哪些产品。 这将有助于您在着手进行下一个JBoss集…

WildFly 8的Camel子系统集成了Java EE –入门

就在三天前&#xff0c;围绕Thomas Diesler&#xff08; tdiesler &#xff09;的团队发布了WildFly-Camel子系统的2.0.0.CR1版本&#xff0c;它允许您将Camel Routes添加为WildFly配置的一部分。 路由可以部署为JavaEE应用程序的一部分。 JavaEE组件可以访问Camel Core API和各…

jQuery中国各个省份地图分部代码

jQuery中国各个省份地图分部代码 在线演示本地下载更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

Spring Boot Actuator:自定义端点,其顶部具有MVC层

Spring Boot Actuator端点允许您监视应用程序并与之交互。 Spring Boot包含许多内置端点&#xff0c;您也可以添加自己的端点。 添加自定义端点就像创建一个从org.springframework.boot.actuate.endpoint.AbstractEndpoint扩展的类一样容易。 但是Spring Boot Actuator也提供了…

jQuery自适应倒计时插件

jQuery自适应倒计时插件 在线演示本地下载更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

Unity3D实践系列03,使用Visual Studio编写脚本与调试

在Unity3D中&#xff0c;只有把脚本赋予Scene中的GameObject&#xff0c;脚本才会得以执行。 添加Camera类型的GameObject。 Unity3D默认使用"MonoDevelop"编辑器&#xff0c;这里&#xff0c;我想使用Visual Studio作为编辑器。 依次点击"Edit","Pre…

纯CSS3文字Loading动画特效

纯CSS3文字Loading动画特效是一款个性的loading文字加载动画。 在线演示本地下载更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

如何为JBoss Developer Studio 8设置BPM和规则工具

最新的JBoss Developer Studio&#xff08;JBDS&#xff09;的发布带来了有关如何开始使用尚未安装的各种JBoss Integration和BPM产品工具集的问题。 在本系列文章中&#xff0c;我们将为您概述如何安装每套工具并说明它们支持哪些产品。 这将有助于您在着手进行下一个JBoss集…

基于HTML5陀螺仪实现ofo首页眼睛移动效果

最近用ofo小黄车App的时候&#xff0c;发现以前下方扫一扫变成了一个眼睛动的小黄人&#xff0c;觉得蛮有意思的&#xff0c;这里用HTML5仿一下效果。 ofo眼睛效果 效果分析 从效果中不难看出&#xff0c;是使用陀螺仪事件实现的。 这里先来看一下HTML5中陀螺仪事件的一些概…

定时开机 命令 自动开机

自动开机&#xff1a; 首先开机后按住Delete键&#xff0c;就是平常常用的删除按键&#xff0c;然后就会进入到BIOS界面。虽然是一个满眼E文的蓝色世界&#xff0c;但不要害怕&#xff0c;没有问题的。 在BIOS设置主界面中选择“Power”选项,进入电源管理窗口。有些机器是在“P…

多米诺骨牌 优化版

算法&#xff1a; 在之前搜索出状态的基础上&#xff0c;再压缩一次状态。 View Code //by yefeng #include<iostream> using namespace std;typedef long long LL; const int mod 9937; int mask,idx, n , m;struct Matrix{int mat[257][257];void zero(){ memse…

Apache Camel请向我解释这些端点选项的含义

在即将发布的Apache Camel 2.15中&#xff0c;我们使Camel更智能。 现在&#xff0c;它可以充当老师&#xff0c;并向您说明其配置方式以及这些选项的含义。 Camel可以做的第一课是告诉您如何配置所有端点以及这些选项的含义。 接下来我们要学习的课程是让Camel解释EIP的选项…

微信扫码进入小程序

这几天开发完小程序之后&#xff0c;需要实现微信扫码进入小程序&#xff0c;坎坎坷坷的过程终于实现了&#xff0c;现在做一总结&#xff1a; 1、配置二维码规则&#xff1a; 2、页面插入代码即可&#xff1a; onLoad: function(options) {console.log("index 生命周期 o…

使用用户名/密码和Servlet安全性保护WebSockets

RFC 6455提供了WebSockets安全注意事项的完整列表。 其中一些是在协议本身中烘焙的&#xff0c;其他一些则需要更多有关如何在特定服务器上实现它们的解释。 让我们谈谈协议本身内置的一些安全性&#xff1a; HTTP请求中的Origin头仅包含标识发起该请求的主体&#xff08;网页…

线程池之外:Java并发并不像您想象的那么糟糕

Apache Hadoop&#xff0c;Apache Spark&#xff0c;Akka&#xff0c;Java 8流和Quasar&#xff1a; 针对Java开发人员的经典用例以及最新的并发方法 关于并发性更新概念的讨论很多&#xff0c;但是许多开发人员还没有机会将他们的想法缠住。 在本文中&#xff0c;我们将详细介…

vue中使用Ueditor编辑器 -- 1

一、 下载包&#xff1a; 从Ueditor的官网下载1.4.3.3jsp版本的Ueditor编辑器&#xff0c;官网地址为&#xff1a;http://ueditor.baidu.com/website/download.html 下载解压后会得到如果下文件目录&#xff1a; 将上述Ueditor文件夹拷贝到vue项目的static文件夹中&#xff0…

编译原理--递归下降分析实验C++

一、实验项目要求 1.实验目的 根据某一文法编制调试递归下降分析程序&#xff0c;以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。 2.实验要求 对下列文法&#xff0c;用递归下降分析法对任意输入的符号串进行分析&#xff1a; &#…

vue中通过js控制页面样式方法

在使用vue.js框架的时候&#xff0c;有时候会希望在页面渲染完成之后&#xff0c;再执行函数方法来处理初始化相关的操作&#xff0c;如果只处理页面位置、宽或者高时&#xff0c;必须要在页面完全渲染之后才可以&#xff0c;页面没有加载完成之前&#xff0c;获取到的宽高不准…

快速指南:剖析JBoss BPM跨进程通信

&#xff08;文章来宾与北美红帽公司高级解决方案架构师杰伊保拉杰共同撰写&#xff09; 几周的提示与技巧文章将深入探讨JBoss BPM Suite&#xff0c;特别是有关如何在两个流程之间进行通信的问题。 在进入解决方案详细信息之前&#xff0c;让我们首先约束将要讨论的用例。 …