Python网络爬虫开发(1)正则表达式

本文详细讲解了网络爬虫的基本概念,重点介绍了HTTP请求方法及其常见状态码,同时深入探讨了正则表达式在爬虫中的应用,包括基本符号、Python中的findall和search方法,以及'.*'和'?.*'的区别。
摘要由CSDN通过智能技术生成

目录

一、网络爬虫简介:

HTTP请求方式的常用方法有以下四种:

几种常见的HTTP状态码种类

常见的HTTP状态码

二、正则表达式:

正则表达式的基本符号:

1.点号“.”: 

2.星号“*”、加号“+”:

3.问号“?”:

4.反斜杠“\”:

5.数字“\d”:

6.小括“()”:

在Python中使用正则表达式:

1.findall():

 2.search():

3.“.*”和“.*?”的区别


一、网络爬虫简介:

网络爬虫也被称为网络蜘蛛、网络机器人,是一个自动下载网页的计算机程序或自动化脚本。

网络爬虫就像一只蜘蛛一样再互联网上沿着URL的丝路爬行,下载每一个URL所指向的网页,并分析和获取页面内容。

网络爬虫的功能强大,可以进行收集数据(最直接、最常用的使用方法),尽职调查,刷流量和秒杀等功能。

爬虫再爬取数据时将会作为客户端模拟整个HTTP通信过程,该程序也需要通过HTTP协议实现。

HTTP请求方式的常用方法有以下四种:

请求方法方法描述
GET请求指定的页面信息,并返回实体主体。GET可能会被网络爬虫等随意访问,因此GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中
HEAD与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回具体的内容,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中该资源的相关信息(元信息或称元数据)
POST向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据会被包含在请求中,这个请求可能会创建新的资源或修改现有资源,或二者皆有
PUT从客户端上传指定资源的最新内容,即更新服务器端的指定资源。

几种常见的HTTP状态码种类

状态码类型状态码意义
1XX表示请求已被接受,需接后续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束
2XX表示请求已成功被服务器接收、理解并接受
3XX表示需要客户端采取进一步的操作才能完成请求。通常用来重定向,重定向目标需在本次响应中指明
4XX表示客户端可能发生了错误,妨碍了服务器的处理。
5XX表示客户端可能发生了错误,妨碍了服务器的处理。

常见的HTTP状态码

常见状态码状态码含义
200 OK请求成功,请求所希望的响应头或数据体将随此响应返回。
400 Bad Request由于客户端的语法错误、无效的请求或欺骗性路由请求,服务器不会处理该请求
403 Forbidden服务器已经理解该请求,但是拒绝执行,将在返回的实体内描述拒绝的原因,也可以不描述仅返回404响应
404 Not Found请求失败,请求所希望得到的资源未被在服务器上发现,但允许用户的后续请求
500 Internal Server Error通用错误消息,服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理,不会给出具体错误信息
503 Service Unavailable由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是暂时的,并且将在一段时间以后恢复

二、正则表达式:

正则表达式在网络爬虫中非常重要,可以在一大段文字中提取出有用的信息,虽然正则表达式不是最简单和高效的数据提取方式,但是是最直接的方式。

正则表达式的基本符号:

1.点号“.”: 

        一个点号可以代替除了换行符以外的任何一个字符,包括但不限于英文字母、数字、汉字、英文标点符号和中文标点符号。

2.星号“*”、加号“+”:

        一个星号可以表示它前面的一个子表达式(普通字符、另一个或几个正则表达式符号)0次到无限次。(一个加号“+”表示匹配1次到无限次)。

3.问号“?”:

           问号表示它前面的子表达式0次或者1次。注意,这里的问号是英文问号。

4.反斜杠“\”:

           反斜杠在正则表达式里面不能单独使用,甚至在整个Python里都不能单独使用。反斜杠需要和其他的字符配合使用来把特殊符号变成普通符号,把普通符号变成特殊符号。

5.数字“\d”:

         “\d”用来表示一位数字,“\d”需要看成一个整体

6.小括“()”:

        小括号可以把括号里面的内容提取出来。

在Python中使用正则表达式:

1.findall():

  Python的正则表达式模块包含一个findall方法,它能够以列表的形式返回所有满足要求的字符串。

findall的函数原型为:

re.findall(pattern, string, flags=0) 

pattern表示正则表达式,string表示原来的字符串,flags表示一些特殊功能的标志。

import re
content = '我的微博密码是:1234567,QQ密码是:33445566,银行卡密码是:888888,Github密码是:999abc999'
password_list=re.findall(':(.*?),',content)
print('找到内容,返回:{}'.format(password_list))

findall()结果是列表。

 2.search():

search()的用法和findall()的用法一样,但是search()只会返回第1个满足要求的字符串。一旦找到符合要求的内容,它就会停止查找。对于从超级大的文本里面只找第1个数据特别有用,可以大大提高程序的运行效率。        

search()的函数原型为:

re.search(pattern, string, flags=0)

import re
content = '我的微博密码是:1234567,QQ密码是:33445566,银行卡密码是:888888,Github密码是:999abc999'
password_search=re.search('密码是:(.*?),',content)
password_search_not_find=re.search('xxx:(.*?),',content)
print(password_search)
print(password_search.group())
print(password_search.group(0))
print(password_search.group(1))
print(password_search_not_find)

      对于结果,如果匹配成功,则是一个正则表达式的对象;如果没有匹配到任何数据,就是None。        

        如果需要得到匹配到的结果,则需要通过.group()这个方法来获取里面的值,如下图所示。

3.“.*”和“.*?”的区别

        ①“.*”:贪婪模式,获取最长的满足条件的字符串。

        ②“.*?”:非贪婪模式,获取最短的能满足条件的字符串。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值