Python网络爬虫实现HTTP请求、解析网页和数据存储(简单静态网页爬取)_python爬虫如何解析网页(1)

文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

2. 请求头处理

3. Timeout设置

4.请求重试设置

5. 生成完整HTTP请求

使用requests库实现

1. 生成请求

2. 查看状态码与编码

3. 请求头与响应头处理

4. Timeout设置

5. 生成完整HTTP请求

解析网页

使用chrome开发者工具查看网页

使用正则表达式解析网页

1.  Python正则表达式模块

compile方法

search方法

findall方法

2. 获取网页中的标题内容

使用Xpath解析网页

1. 基本语法

2. 谓语

3. 功能函数

4. 提取header节点下全部标题文本及对应链接

使用Beautiful Soup解析网页

1. 创建BeautifulSoup对象

2. 对象类型

3. 搜索特定节点并获取其中的链接及文本

3. 搜索特定节点并获取其中的链接及文本

数据储存

数据存储

1. 将数据存储为JSON文件

2. 将数据存储入MySQL数据库


实现HTTP请求

使用urllib3库实现

许多Python的原生系统已经开始使用urllib3库,其提供了很多python标准库里所没有的重要特性。

连接特性连接特性
线程安全管理连接池
客户端SSL∕TLS验证使用分部编码上传文件
协助处理重复请求和HTTP重定位支持压缩编码
支持HTTP和SOCKS代理测试覆盖率达到100%
1. 生成请求

通过request方法即可创建一个请求,该方法返回一个HTTP响应对象。Reques语法格式如下。

reques方法常用的参数及其说明如下。

参数说明
method接收string。表示请求的类型,如“GET”、“HEAD”、“DELETE”等。无默认值
url接收string。表示字符串形式的网址。无默认值
fields接收dict。表示请求类型所带的参数。默认为None
headers接收dict。表示请求头所带参数。默认为None
**urlopen_kw接收dict或其他Python中的类型的数据。依据具体需要及请求的类型可添加的参数,通常参数赋值为字典类型或为具体数据。无默认值
2. 请求头处理

在request方法中,如果需要传入headers参数,可通过定义一个字典类型实现。定义一个包含User-Agent信息的字典,使用浏览器为火狐和chrome浏览器,操作系统为“Windows NT 6.1; Win64; x64”,向网站“http://www.tipdm.com/tipdm/index.html”发送带headers参数的GET请求,hearders参数为定义的User-Agent字典。

3. Timeout设置

为防止因为网络不稳定、服务器不稳定等问题造成连接不稳定时的丢包,可以在请求中增加timeout参数设置,通常为浮点数。依据不同需求,timeout参数提供多种设置方法,可直接在URL后设置该次请求的全部timeout参数,也可分别设置该次请求的连接与读取timeout参数,在PoolManager实例中设置timeout参数可应用至该实例的全部请求中。

4.请求重试设置

urllib3库可以通过设置retries参数对重试进行控制。默认进行3次请求重试,并进行3次重定向。自定义重试次数通过赋值一个整型给retries参数实现,可通过定义retries实例来定制请求重试次数及重定向次数。若需要同时关闭请求重试及重定向则可以将retries参数赋值为False,仅关闭重定向则将redirect参数赋值为False。与Timeout设置类似,可以在PoolManager实例中设置retries参数控制全部该实例下的请求重试策略。

5. 生成完整HTTP请求

使用urllib3库实现生成一个完整的请求,该请求应当包含链接、请求头、超时时间和重试次数设置。

使用requests库实现

requests库是一个原生的HTTP库,比urllib3库更为容易使用。requests库发送原生的HTTP 1.1请求,无需手动为URL添加查询字串,也不需要对POST数据进行表单编码。相对于urllib3库,requests库拥有完全自动化Keep-alive和HTTP连接池的功能。requests库包含的特性如下。

连接特性连接特性连接特性
Keep-Alive&连接池基本∕摘要式的身份认证文件分块上传
国际化域名和URL优雅的key∕value Cookie流下载
带持久Cookie的会话自动解压连接超时
浏览器式的SSL认证Unicode响应体分块请求
自动内容解码HTTP(S)代理支持支持.netrc
1. 生成请求

requests库生成请求的代码非常便利,其使用的request方法的语法格式如下。

request方法常用的参数及其说明如下。

参数说明
method接收string。表示请求的类型,如“GET”、“HEAD”、“DELETE”等。无默认值
url接收string。表示字符串形式的网址。无默认值
**kwargs接收dict或其他Python中的类型的数据。依据具体需要及请求的类型可添加的参数,通常参数赋值为字典类型或为具体数据
2. 查看状态码与编码

需要注意的是,当requests库猜测错时,需要手动指定encoding编码,避免返回的网页内容解析出现乱码。 手动指定的方法并不灵活,无法自适应对应爬取过程中不同网页的编码,而使用chardet库比较简便灵活,chardet库是一个非常优秀的字符串∕文件编码检测模块。 chardet库使用detect方法检测给定字符串的编码,detect方法常用的参数及其说明如下。

参数说明
byte_str接收string。表示需要检测编码的字符串。无默认值
3. 请求头与响应头处理

requests库中对请求头的处理与urllib3库类似,也使用headers参数在GET请求中上传参数,参数形式为字典。使用headers属性即可查看服务器返回的响应头,通常响应头返回的结果会与上传的请求参数对应。

4. Timeout设置

为避免因等待服务器响应造成程序永久失去响应,通常需要给程序设置一个时间作为限制,超过该时间后程序将会自动停止等待。在requests库中通过设置timeout这个参数实现,超过该参数设定的秒数后,程序会停止等待。

5. 生成完整HTTP请求

使用requests库的request方法向网站“http://www.tipdm.com/tipdm/index.html”发送一个完整的GET请求,该请求包含链接、请求头、响应头、超时时间和状态码,并且编码应正确设置。

解析网页

使用chrome开发者工具查看网页

chrome浏览器提供了一个非常便利的开发者工具,供广大web开发者使用,该工具提供包括查看网页元素、查看请求资源列表、调试JS等功能。该工具其中一个打开方式可通过右键单击chrome浏览器页面,在弹出菜单中单击图所示的“检查”选项打开。

也可以单击chrome浏览器右上角快捷菜单,如图所示,单击“更多工具”选项中的“开发者工具”选项,或使用快捷键组合Ctrl+Shift+I。

chrome开发者工具目前包括了9个面板,界面如图所示。

chrome开发者工具各面板功能如下。

面板说明
元素面板(Elements)该面板可查看渲染页面所需的HTML、CSS和DOM(Document Object Model)对象,并可实时编辑这些元素调试页面渲染效果
控制台面板(Console)该面板记录各种警告与错误信息,并可作为shell在页面上与JavaScript交互
源代码面板(Sources)该面板中可以设置断点调试JavaScript
网络面板(Network)该面板可查看页面请求、下载的资源文件及优化网页加载性能。还可查看HTTP的请求头、响应内容等
性能面板(Performance)原旧版chrome中的时间线面板(Timeline),该页面展示页面加载时所有事件花费时长的完整分析
内存面板(Memory)原旧版chrome中的分析面板(Profiles),提供比性能面板更详细的分析,如可跟踪内存泄露等
应用面板(Application)原旧版chrome中的资源面板(Profiles),该面板可检查加载的所有资源
安全面板(Security)该面板可调试当前网页的安全和认证等问题并确保网站上已正确地实现HTTPS
审查面板(Audits)该面板对当前网页的网络利用情况、网页性能方面进行诊断,并给出优化建议

1. 元素面板

在爬虫开发中,元素面板主要用来查看页面元素所对应的位置,比如图片所在位置或文字链接所对应的位置。面板左侧可看到当前页面的结构,为树状结构,单击三角符号即可展开分支。 依次单击树状结构的三角符号,依次打开“body”“header”“div”“nav”标签,找到第一个“li”标签,如图所示。

将鼠标悬停至“li”标签中的“首页”会同步在原网页界面中标识出对应部分的文字“首页”,如图所示。

  1. 源代码面板

切换至源代码面板(Sources),单击左侧“tipdm”文件夹中的“index.html”文件,将在中间显示其包含的完整代码,如图所示。

  1. 网络面板

切换至网络面板(Network),需先重新加载页面,之后单击“index.html”资源,将在中间显示该资源的头部信息、预览、响应信息、Cookies和花费时间详情,如图所示。

Headers标签展示该资源的HTTP头信息,主要包括Request URL、Request Method、Status Code、Remote Address等基本信息,以及详细的Response Headers、Request Headers,如图所示。

Preview标签根据所选择的资源类型(JSON、图片、文本)显示相应的预览,如图所示。

Response标签显示HTTP的响应信息,如图所示中选中的“index.html”文件为HTML文件,将展示HTML代码。

Cookies标签显示资源HTTP的请求和响应过程中的Cookies信息,如图所示。

Timing标签显示资源在整个请求过程中各部分花费的时间,如图所示。

使用正则表达式解析网页

1.  Python正则表达式模块

使用re的步骤为:先将正则表达式的字符串形式编译为Pattern实例;然后使用Pattern实例处理文本并获得匹配结果(一个Match实例);最后使用Match实例获得信息,进行其他的操作。re模块中常用的方法及其说明如下。

方法说明
compile将正则表达式的字符串转化为Pattern匹配对象
match将输入的字符串从头开始对输入的正则表达式进行匹配,一直向后直至遇到无法匹配的字符或到达字符串末尾,将立即返回None,否则获取匹配结果
search将输入的字符串整个扫描,对输入的正则表达式进行匹配,获取匹配结果,否则输出None
split按照能够匹配的字符串作为分隔符,将字符串分割后返回一个列表
findall搜索整个字符串,返回一个列表包含全部能匹配的子串
finditer与findall方法作用类似,以迭代器的形式返回结果
sub使用指定内容替换字符串中匹配的每一个子串内容

compile方法       re模块中使用compile方法将正则表达式的字符串转化为Pattern匹配对象,compile方法的语法格式如下。

compile方法常用的参数及其说明如下。

参数说明
string接收string。表示需要转换的正则表达式的字符串。无默认值
flag接收string。表示匹配模式,取值为运算符“
compile方法

flag参数的可选值如下。

可选值说明
re.I忽略大小写
re.M多行模式,改变“^”和“$”的行为
re.S“.”任意匹配模式,改变“.”的行为
re.L使预定字符类\w\W\b\B\s\S取决与当前区域设定
re.U使预定字符类\w\W\b\B\s\S\d\D取决于unicode定义的字符属性
re.X详细模式,该模式下正则表达式可为多行,忽略空白字符并可加入注释
search方法

earch方法将输入的字符串整个扫描,对输入的正则表达式进行匹配,若无可匹配字符,将立即返回None                   ,否则获取匹配结果,search方法的语法格式如下。

search方法常用的参数及其说明如下。

参数说明
pattern接收Pattern实例。表示转换后的正则表达式。无默认值
string接收string。表示输入的需要匹配的字符串。无默认值
flag接收string。表示匹配模式,取值为运算符“
findall方法

findall方法搜索整个string,返回一个列表包含全部能匹配的子串,其语法格式如下。

findall方法常用的参数及其说明如下。

参数说明
pattern接收Pattern实例。表示转换后的正则表达式。无默认值

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值