Python网络爬虫(一)---urllib

article/2025/10/13 0:52:32

什么是网络爬虫

网络爬虫英文可以叫crawler,也可以叫spider,简而言之就是利用计算机从网上抓取你所感兴趣的文件、图片、视频等。其实在大多数情况下,没有什么网络爬虫,我们也可以根据自己所需要的,通过浏览器从网上下载东西,(而网络爬虫的实质也是在模仿浏览器进行一系列的操作)但是如果我们所要的东西特别多时,例如要下载10000张图片,一个个用手去点岂不太麻烦了,所以我们需要利用到计算机来帮助我们爬取。

爬虫中用到的常用工具

用计算机进行数据的抓取的能动性肯定不如手动,但我们将抓取的逻辑、规律告诉计算机,那他的动作将变得很快,编写爬虫程序的过程也就是寻找规律的过程。
我们都知道网络上的资源都有属于自己的URL,我们所要做的就是一步步的寻找所要资源的URL,并把寻找URL的规律告诉计算机,通过URL来下载资源。
对于前期的探索工作,我们就需要借助一些工具,通过这些工具来了解对一个URL进行访问的时候到底发生了什么,最常见的就是浏览器自带的“开发者工具”,一般在浏览器的右上角可以找到,把他打开,点开web控制台中的网络一栏,当我们进行网页的打开、链接的点击时,控制台中就会显现出受到的数据包,从这些数据包中就可以看到请求的url,请求方式,请求头,响应头,响应内容等。
在这里插入图片描述
还有一个比较常用的工具叫Fiddler,是一个专业的抓包软件,他的作用就相当于一个中间人,站在通信的两个人中间,信息的流通都会经过他,这样来往了什么内容他都能获取。
在这里插入图片描述
在写爬虫程序的时候能灵活的运用这些工具会带来很大的便利。

用Python写爬虫

编程语言只是达到目的的工具,不是目的本身,用其他语言也可以用来写爬虫,比如JAVA,但相比Python,从一个“Helloworld”就可以看出JAVA的代码量较大,对于一个小的爬虫来说,有点冗余,并且由于Python有着庞大的第三方库的支持,近年来还在不断成长,咱不能说Python比JAVA好,但就爬虫来说,用Python较为适合。

urllib库

urllib是python中用于模拟浏览器发送请求的库,是python自带的,不需要另外下载的。在urllib中包含四个模块:
1.request:是用于模拟浏览器发送请求的核心模块。
2.parse:是一个对URL进行处理的模块,进行URL编码解码。
3.error:处理在爬取过程中发生异常的模块,例如没网,连接失败等。
4.robotparser:用于解析robot.txt文件的模块,robots.txt是用来告诉搜索引擎网站上哪些内容可以被访问、哪些不能被访问。当搜索引擎访问一个网站的时候,它首先会检查网站是否存在robots.txt,如果有则会根据文件命令访问有权限的文件。

在这四个模块当中较为常用是前两个,如果想把程序写的漂亮,第三个也会用到,接下来主要就request,parse做一些介绍。

urllib.request
urllib.request当中最常用的方法是urlopen(url),即向指定的url发送请求,他会返回一个对象,对象包含着返回回来的各种信息,实例如下:

import urllib.request #导入库
url='http://www.baidu.com/'
response = urllib.request.urlopen(url)#发送请求,返回对象
print(response.read().decode())

输出结果如下:
在这里插入图片描述
response对象还有以下常用方法:

方法作用
geturl()获取请求的URL
getheaders()获取头信息
getcode()获取状态码
readlines()按行读取,返回列表
read()读取内容,内容为字节类型

request中还有一个常用的方法叫Request(),他的作用是创建一个请求对象,通常用urlopen()发送请求时,传递一个url就行了,但我们知道双方进行通信之后,你的各种信息那边都会知道,比如用的什么浏览器,当我们用爬虫程序进行网站的访问时,那边会知道,进而可能会限制我们的爬取,所以我们得创建请求对象,伪装自己是浏览器,所以就得伪装自己的头信息headers,在其中加入user-agent,这个可以通过抓包工具知道自己的浏览器的user-agent是什么,也可以从网上查。
headers是一个字典,代码如下:

import urllib.request
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'
}
url="http://www.baidu/com/"
request=urllib.request.Request(url=url,headers=headers)
response=urllib.request.urlopen(request)

urllib.parse
url只能由特定的字符组成,例如字母,数字,下划线,如果出现其他的,就要对其进行编码,例如中文。
当我们在浏览器中输入“https://www.baidu.com/baidu?wd=网络爬虫”时,按下回车,会显示出网络爬虫的搜索页面,但把这个url用到我们得程序中的话却执行不成功,这是由于,浏览器自动把后面的“网络爬虫”编译成这种形式:
“%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB”
不编码的后果
人只能看懂‘网络爬虫’,但上面那个是看不懂的,所以我们要利用parse来将url进行编码。

import urllib.request #导入库
import urllib.parse
url='http://www.baidu.com/baidu?wd=网络爬虫'
b=urllib.parse.quote(url)#编码
j=urllib.parse.unquote(b)#解码
print(b+"\n"+j)

结果如下:
在这里插入图片描述
从结果来看还算成功,但它把“http://”等内容也编码了,我们可以只对后面的进行编码,然后再拼接上去。
有的时候url中的参数给的是字典类型时,可以用urlencode()方法将字典中的内容拼接并编码:

import urllib.parse
data={'wd':'网络爬虫','ie':'utf-8'
}
s=urllib.parse.urlencode(data)
print(s)

在这里插入图片描述
urlencode()方法也经常用在post请求当中。
何为post,说到post就不得不说get,这俩都是在客户机和服务器之间进行请求-响应时,最常被用到的方法,上面的实例代码对URL的访问都是get方式的,get是从指定的资源请求数据,post是向指定的资源提交要被处理的数据。举个例子,当你要访问一个网站时,输入那个网站的网址就可以看到网站上的各种资源,这个get请求,当你是那个网站的用户,要登录时,会输入账号,密码,再按登录,这个请求过程就是post,你传递了你的账号密码,让对方处理,进入你的主页面。
get方式url中的参数(例如上面的“wd=网络爬虫”)一般是跟在url后面的,他的长度一般都有限制,英文名叫query_string。post方式的参数是以表单形式传递的,在代码中一般写成一个字典,再用urlencode()进行转换,英文名叫form_data。

import urllib.request
import urllib.parse
headers={ #请求头'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'
}
url="..."
form_data={#表单数据'k':'v',...
}
request=urllib.request.Request(url=url,headers=headers)#构建请求
form_data=urllib.parse.urlencode(form_data).encode()#处理表单数据
response=urllib.request.urlopen(request,form_data)#发生请求

http://chatgpt.dhexx.cn/article/IRNf759F.shtml

相关文章

python爬虫爬取英文考研词汇

这几天开始背诵考研单词,在网上查找英语考研必备词汇,发现都是长这样的: 每一页的点击太费时费力了。因此萌生了为什么不能用爬虫把单词爬下来保存在本地呢?说干咱就干。首先点开搜索中的某个网页,分析网页的结构,找到其中的规律。例如,我找的是跨考考研的网站: 这是…

python爬虫: 爬一个英语学习网站

爬虫的基本概念 关于爬虫的基本概念, 推荐博客https://xlzd.me/ 里面关于爬虫的介绍非常通俗易懂. 简单地说,在我们输入网址后到可以浏览网页,中间浏览器做了很多工作, 这里面涉及到两个概念: IP地址: IP地址是你在网络上的地址,大部分情况下…

可视化数据分析-基于JavaScript的d3实践学习

目录 一.svg简介 二.D3简介 D3功能来源 常用语法说明 三.d3可视化访问MySQL数据库 实现方法 四.具体用例实现 svg绘制直方图 svg绘制二叉树(以电影票房为例) D3进行数据可视化(链接数据库) D3绘制直方图​ D3绘制饼图…

Kindle产品评论数据分析---基于excel的分析过程

目录 业务背景 一)明确分析目的 二)数据采集 三)数据清洗 四)数据分析与构建模型 1、相关产品的评论数排名和平均评分反映的问题 2、各评论占比,推荐评论中好评占比 3、kindle相关产品随时间变化其评论数的变化…

数据挖掘HeartbeatClassification——数据分析

如同计算机视觉中一样,在训练目标识别的网络之前,会对图片进行预处理,如 裁切,旋转、放大缩小,以加强网络的泛化能力。在数据挖掘中,我们首先要做的就是对拥有的数据进行分析( 涉及到《概率论与数理分析》的…

javaScript数据可视化

文章目录 canvas画布介绍绘制线段起始点设置其他点设置(可以有多个)划线方法 属性填充线段颜色线段宽度线段例子 绘制矩形第一种方式:第二种方式矩形例子 绘制圆形圆形例子 清除画布清除例子 绘制文字属性 svg介绍:基本的svg元素例…

Python交互式数据分析报告框架:Dash

译者序 原文于2017年6月21日发布,时过半载,将这篇既不是教程,也不是新闻的产品发布稿做了一番翻译,为何?只因去年下半年的时候,用R语言的博哥和龙少有Shiny这样的框架可以开发交互式整合Web数据分析报告&am…

【数据可视化】免费开源BI工具 DataEase 之血缘关系分析

近期,DataEase 发布的版本 V1.8 版本中,在系统管理模块新增了血缘分析功能,可以支持对数据源、数据集、仪表板做关联分析,支持按表格查看和按关系图查看,并且在删除数据源、数据集时,也支持查看对应的血缘分…

数据分析与数据可视化的完成,需要了解一下这四款JS库

四款出色的JavaScript库,帮助大家更为轻松地完成数据分析与可视化工作,具体如下: Data-Driven-Documents (D3.js) 在讨论JavaScript数据分析时忽略掉Data-Driven-Documents (D3),就如同在谈论微软时忽略掉其操作系统 样。 Data-D…

数据挖掘之关联分析(实验展示以及源代码)

数据挖掘之关联分析 算法实现:Apriori算法和FP-growth 算法源代码 简单描述下,关联分析概念 关联分析概念主要参考下面的博文 原文:https://blog.csdn.net/qq_40587575/article/details/81022350 关联分析是从大量数据中发现项集之间有趣的…

【数据分析入门】python数据分析-探索性数据分析之多因子与对比分析可视化

文章目录 多因子与对比分析可视化理论基础假设检验与方差检验假设检验方差检验 相关系数:皮尔逊、斯皮尔曼回归:线性回归PCA与奇异值分解 代码实践交叉分析分组分析相关分析因子分析 总结代码实现 相关性线性回归PCA注意:sklearn中pca用的方法是奇异值分解的方法&am…

数据分析系列之挖掘建模

经过数据探索与数据预处理,得到了可以直接建模的数据,根据挖掘目标和数据形式可以建立分类与预测,聚类分析,关联规则,时序模式和偏差检测等模型,帮助企业提取数据中的商业价值. 分类与预测 对于之前的背景假设,餐饮企业会经常遇到如下问题: 如何基于菜品历史销售情况,以及节…

【大数据分析与挖掘】挖掘建模之关联分析

文章目录 一、关联规则1.1 常用的关联规则算法1.2 Apriori算法介绍1.2.1 关联规则与频繁项集1.2.2 Apriori算法的思想与性质1.2.3 Apriori算法的实现的两个过程1.2.4 Apriori算法的实现案例 一、关联规则 关联规则分析也成为购物篮分析,最早是为了发现超市销售数据…

Hands-on-data-analysis 动手数据分析

动手数据分析笔记 第一章 第一节 数据载入及初步观察 数据载入 df pd.read_csv(file_path)df2 pd.read_table(file_path)read_csv 函数 见CSDN 博客: https://blog.csdn.net/weixin_39175124/article/details/79434022 问:read_csv 和 read_table …

python数据分析-因子分析(转载)

python数据分析-因子分析(转载) (获取更多知识,前往前往我的wx ————公z号 (程式解说) 原文来自python数据分析-因子分析

ThreeJs 数据可视化学习扫盲

一:前言 数据可视化是一个跨领域的行业,其中包含了图形学、数学、视觉传达等专业领域。 下图罗列出了一个简单的学习方向。 二:可视化方案以及学习路线 目前采用的是比较成熟,社区活跃度更高的Three.js,它是一个开源…

数据处理以及Hive数据分析

数据处理以及Hive数据分析 一、pandas进行数据预处理【1】待处理的一部分数据【2】原始数据文件的格式说明【3】数据预处理要求【4】 处理完成的数据字段说明【5】 实验方法使用pandas进行数据预处理 【6】解析题意【7】代码展示(1)读取文件(…

Python交互式数据分析报告框架~Dash介绍

原文作者:Plotly,Chris Pamer 原文链接: https://link.jianshu.com/?thttps%3A%2F%2Fmedium.com%2F%40plotlygraphs%2Fintroducing-dash-5ecf7191b503 译者序:原文于2017年6月21日发布,时过半载,将这篇既不是教程…

CESI: Canonicalizing Open Knowledge Bases using Embeddings and Side Information

开放性知识库的规范化(个人理解:这里的规范化实际上就是将相同语义的实体或关系聚集在一起,从而表示一个实体或关系),主要是OPENie提取的过程中没有进行区分,最近的研究发现,开放KBS的规范化实际…

计算机一级仿宋gb2312,仿宋gb2312字体

一般情况下,这款软件在试用的过程可能还有点小问题,但是正所谓瑕不掩瑜,相信用不了多久,只要程序猿给力点,这种小小的反馈不爽就可以解决。 仿宋gb2312字体字体简介 仿宋_GB2312字体是印刷字体的一种 ,仿照…