目录

一、网络爬虫简介:

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.“.*”和“.*?”的区别

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

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

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐