当前位置: 首页 > 后端技术 > Python

Python3网络爬虫开发实战读书笔记---第3章基础库的使用

时间:2023-03-26 15:01:09 Python

本系列文章是我在阅读《Python3网络爬虫开发实战》等网上资料学习爬虫过程中的一些笔记和笔记.我希望与你分享我的经验。章节概述:本章介绍爬虫依赖的几个基本库的使用章节结构:UrllibRequests正则表达式具体内容:UrllibUrllib库主要负责发送HTTP请求,主要包括四个模块:request:模拟发送请求模块error:exceptionhandlingModuleparse:工具模块,提供处理URL的方法(拆分、解析、合并等)robotparser:识别网站的robots.txt文件,判断哪些网站可以被抓取1.request发送请求1.1urllib。request.urlopen()这个函数主要作用是返回一个http.client.HTTPResponse类型的对象。这个对象有read()、readinto()、getheader(name)、getheaders()、fileno()等方法,还有msg、version、status、reason、debuglevel、closed等属性。我们可以通过这些方法和属性得到一系列关于结果的信息。该函数支持的参数如下:urllib.request.`urlopen`(_url_,_data=None_,[timeout_,]*_,_cafile=None_,_capath=None_,_cadefault=False_,_context=None_)data:when发送POST请求可以加上这个参数来模拟POST请求的参数,但是这个参数需要转换成字节流类型,比如data=bytes(urllib.parse.urlencode({'id':'test'}),encoding='utf8')timeout:设置超时时间,单位秒,如果超过这个时间没有响应,会抛出异常urllib.error.URLError,这个错误的reason属性是socket.timeoutcontext:ssl.SSLContext类型,用于SpecifyingSSLsettings1.2urllib.request.Requesturlopen只是一个很简单的请求。如果请求需要更完整,比如添加Header,就需要使用Request。使用方法可以是用urllib.request.Request创建一个Request对象,然后把这个对象作为参数传入urlopen。请求API:classurllib.request.`Request`(_url_,_data=None_,_headers={}_,_origin_req_host=None_,_unverifiable=False_,_method=None_)url:唯一需要的参数,网页urlheader:字典类型参数,模拟请求头,可以通过该参数赋值,或者通过add_header()方法添加origin_req_host:指请求者的主机名或IP地址unverifiable:表示请求是否无法验证,即用户没有足够的权限选择接收这个请求结果方式:GET/POST/PUT等1.3高级操作,如cookie,proxy等---Handler处理器+Opener1.3.1urllib.request。`BaseHandler`:所有Handlers的父类,提供基本方法1.3.2常用HandlerHTTPDefaultErrorHandler:处理HTTP响应错误HTTPRedirectHandler:处理重定向HTTPCookieProcessor:处理CookieProxyHandler:处理代理HTTPPasswordMgr:处理密码管理HTTPBasicAuthHandler:处理认证管理1.3.3通过Handler创建Opener:需要用户名密码认证的网站使用HTTPPasswordMgrWithDefaultRealm对象add_password的方法添加用户名和密码对,然后使用此对象作为参数创建HTTPBasicAuthHandler,然后使用urllib.request.`build_opener`([handler_,_...])创建opener,然后调用open方法opener对象请求需要代理的网页网站ProxyHandler+opener需要cookie处理http.cookiejar.CookerJar()+HTTPCookieProcessor+openerCookie文件保存(1)http.cookiejar.MazillaCookieJar(filename)+HTTPCookieProcess或者(2)http.cookiejar.LWPCookieerJar(filename)+HTTPCookieProcessorCookie文件使用了http.cookiejar.LWPCookieerJar()对象的load方法2.错误处理异常2.1urllib.error.`URLError`请求模块产生的异常是都是由URLError模块捕获2.2urllib.error引起的。`HTTPError`是URLError的子类,用于处理HTTP请求错误,有code(状态码)、reason(错误原因)、header(返回请求头)三个属性2.3除了捕获顺序应该是FirstHTTPError,然后是URLError3。Parse解析链接3.1.urllib.parse.`urlparse`(_urlstring_,_scheme=''_,_allow_fragments=True_):用于URL识别和分割,返回urllib.parse。解析结果类型。内容有ParseResult(scheme='http',netloc='www.cwi.nl:80',path='/%7Eguido/Python.html',params='',query='',fragment='')scheme:://netloc之前的内容:第一个问号之前的内容,表示网页的域名path:是访问路径params:参数query:问号之后的查询条件这些结果也可以通过index,因为ParseResult本身是一个metaGroup3.2urlparse传入参数包括urlstring(必填,带解析URL),scheme是默认协议,allow_fragment表示是否忽略fragment,即#3.3之后的锚点urlunparse:ConstructURL3.4urlsplit:类似于urlparse,只是parms会合并输入路径部分,返回SplitResult元组对象3.5urljoin:合并链接,第一个参数是base_url,第二个参数是新链接,如果是两种链接方案,netloc,和path重复,默认使用新链接3.6urlencode:构造GET方法请求参数时,可以将字典序列化为请求参数3.7parse_qs:反序列化urlencode,将参数转为字典3.8parse_qsl:将参数转为元组列表3.9quote:将内容转为URL编码格式,如有中文时避免乱码3.10unquote:URL解码4.Robots协议,urllib.robotparser4.1Robots协议:爬虫协议或机器人协议。全称是RobotsExclusionProtocol。告诉爬虫和搜索引擎要抓取哪些页面,不要抓取哪些页面。通常是存放在网站根目录下的robots.txt文本文件4.2robotparser模块:负责解析robots.txt,使用模块中的RobotFileParser类判断爬虫是否有权限爬取该网页4.3常用方法4.3.1set_url:设置robots.txt路径4.3.2read:读取robots.txt文件4.3.3parse:解析robots.txt文件4.3.4can_fetch:检测某个URL是否可以被搜索引擎抓取4.3.5mtime:返回上次抓取和分析robots.txt的时间4.3.6修改:设置当前时间为上次抓取和分析robots.txt的时间Requests1。基本用法requests.get()和urlopen一样,得到一个Response对象(requests.models.Response),还有POST、PUT等方法。2、高级用法requests.post()可以:传入file(上传文件)添加header(请求头中可以添加cookie)添加verify参数跳过SSL验证或者传入cert参数,指定本地验证证书配置proxies参数传入Proxy参数添加超时参数设置超时参数添加auth参数,比如用户名密码正则表达式正则表达式用于处理字符串,有自己特定的语法结构,可以实现字符串的检索、替换、匹配验证1.常用规则2.匹配方法match()检测字符串是否符合正则表达式。在匹配过程中,您可以将要提取的部分用括号括起来。也可以加上表示模糊匹配。匹配还包括贪心和非贪心匹配,非贪心使用?而不是*,它意味着匹配尽可能少的字符。3.修饰符,控制匹配方式4.search()匹配,如果match方法开头不匹配,则直接判断失败,search用于检测某个字符是否匹配5.findall返回所有匹配部分在search的基础上6.sub用于保留匹配部分,实现修改字符串的功能7.compile用于将字符串编译成正则表达式对象