快速入门Python爬虫

前言

文章是基于哔哩哔哩UP主 林粒粒呀 的爬虫教学视频的学习笔记,供大家学习参考交流。文章写的一般,视频讲解更为通俗易懂,十分感谢 林粒粒呀。视频链接:【【Python+爬虫】爆肝两个月!拜托三连了!这绝对是全B站最用心(没有之一)的Python+爬虫公开课程,从入门到(不)入狱 !】

友情提示:该视频第二节为Python基础教学,了解Python的同志可以直接跳过,实际上关于爬虫的时间只有1小时。




requests库的使用

介绍:
我们通过向使用脚本模拟用户网站服务器发送请求,让网站服务器自己将网站信息发送到我们的过程就是爬虫.

为了实现向服务器发送请求的功能,我们使用Python的第三方库requests.一般向服务器发送的请求有Get请求和Post请求,前者用于向服务器请求网站数据,后者用于向服务器发送数据,明显我们在爬虫中主要用到的是Get请求,因此下面我们首先介绍request库中的Get请求.

Get请求

import requests
response = requests.get('https://baidu.com')  # 发送Get请求的函数时get函数,其中需要传入的参数是想要爬取数据的网址
print(response)  # 使用get方法后会返回一个Response实例,该实例后面中括号内的数字代表状态码
<Response [200]>

Response常见的属性

status_code: 状态码

  • 200族:成功
    • 200:请求成功
    • 204:请求成功,但无结果返回
  • 300族:重定向
    • 301:永久重定向
    • 302:临时重定向
  • 400族:客户端错误
    • 400:请求报文存在语法错误
    • 401:需要认证或者认证失败
    • 403:请求被服务器拒绝了
    • 404:服务器上无法找到请求的资源
    • 418:服务器反爬虫
  • 500族:服务器错误
    • 501:服务端执行请求时发生了错误
    • 503:服务器正在超负载或者停机维护,无法处理请求

ok: 请求是否成功 如果访问成功 (状态码为2xx) 则ok的值为True 否则为False

text: 请求得到的内容

if response.ok:
    print("成功爬取到网站数据")
    print(response.text)  # HTML形式
else:
    print("失败")

成功爬取到网站数据

<!doctype html><html lang="zh" dir="ltr"><head><meta name="theme-color" content="#4F4F4F" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>必应</title><link rel="preconnect" href="https://r.bing.com" /><link rel="preconnect" href="https://r.bing.com" crossorigin/><link rel="dns-prefetch" href="https://r.bing.com" /><link rel="dns-prefetch" href="https://r.bing.com" crossorigin/><link rel="stylesheet" href="/rp/RCJCS6O5TykkUhXX1pwc6RsdyuI.gz.css" type="text/css"/><script type="text/javascript">//<![CDATA[
var logJSText=function(n,t){t===void 0&&(t=null);(new Image).src=_G.lsUrl+'&Type=Event.ClientInst&DATA=[{"T":"CI.ClientInst","FID":"CI","Name":"'+escape(n)+(t?'","Text":"'+escape(t):"")+'"}]'},getHref=function(){return location.href};try{var ignErr=["ResizeObserver loop","Script error"],maxErr=3,ignoreCurrentError=function(n,t){return ignErr.some(function(t){return n.includes(t)})?(t!=null&&(typeof sj_sp!="undefined"&&sj_sp(t),typeof sj_pd!="undefined"&&sj_pd(t)),!0):!1},regexEsc=function(n){return n.replace(/([.?*+^$&[\]\\(){}|<>-])/g,"\\$1")};window.jsErrorHandler=function(n){var f,p,h,rt,ut,u,e,ft,o,a,v,s;try{if(f='"noMessage"',p=(n.error||n).message||f,ignoreCurrentError(p,n))return;if(h=(window.ERC?window.ERC:0)+1,window.ERC=h,h>maxErr){logJSText("max errors reached");return}var c=n.error||n,w=n.filename,b=n.lineno,k=n.colno,d=n.extra,l=c.severity||"Error",g=c.message||f,i=c.stack,t='"'+escape(g.replace(/"/g,""))+'"',nt=new RegExp(regexEsc(getHref()),"g"),tt=window.lirab,it=window.liraa,r=tt?" hint == ["+tt:"";if(r=r+(it?", "+it+")":r?"]":""),i){for(rt=/\(([^\)]+):[0-9]+:[0-9]+\)/g,u={};(ut=rt.exec(i))!==null;)e=ut[1],u[e]?u[e]++:u[e]=1;o=0;for(a in u)u[a]>1&&(v=regexEsc(a),ft=new RegExp(v,"g"),i=i.replace(ft,o),i+="#"+o+"="+v,o++);i=i.replace(nt,"self").replace(/"/g,"");t+=',"Stack":"'+(escape(i)+'"')}if(w?t+=',"Meta":"'+escape(w.replace(nt,"self"))+r+'"':r&&(t+=',"Meta":"'+r+'"'),b&&(t+=',"Line":"'+b+'"'),k&&(t+=',"Char":"'+k+'"'),d&&(t+=',"ExtraInfo":"'+d+'"'),g===f)if(l="Warning",t+=',"ObjectToString":"'+n.toString()+'"',JSON&&JSON.stringify)t+=',"JSON":"'+escape(JSON.stringify(n))+'"';else for(s in n)n.hasOwnProperty(s)&&(t+=',"'+s+'":"'+n[s]+'"');var et=(new Date).getTime(),ot='"T":"CI.'+l+'","FID":"CI","Name":"JS'+l+'","Text":'+t+"",st="<E><T>Event.ClientInst<\/T><IG>"+_G.IG+"<\/IG><TS>"+et+"<\/TS><D><![CDATA[[{"+ot+"}]]\]><\/D><\/E>",ht="<ClientInstRequest><Events>"+st+"<\/Events><STS>"+et+"<\/STS><\/ClientInstRequest>",y=new XMLHttpRequest;y.open("POST","/fd/ls/lsp.aspx?",!0);y.setRequestHeader("Content-Type","text/xml");y.send(ht);typeof sj_evt!="undefined"&&sj_evt.fire("ErrorInstrumentation",t)}catch(ct){logJSText("MetaJSError","Failed to execute error handler. "+ct.message)}};window.addEventListener&&(window.addEventListener("error",window.jsErrorHandler,!1),window.addEventListener("unhandledrejection",window.jsErrorHandler,!1))}catch(e){logJSText("MetaJSError","Failed to bind error handler "+e.message)};
//]]></script></head><body><div class="hp_body"><div class="hpl hp_cont"><div class="sbox"><form action="/search" id="sb_form" class="sb_form"><input id="sb_form_q" class="sb_form_q" name="q"
                   placeholder="" type="search" maxlength="1000" autocapitalize="off" autocomplete="off" spellcheck="false"
                   title="输入搜索词" autofocus="autofocus" ) /><input id="sb_form_go" type="submit"
    title="搜索" name="search" value=""
    tabIndex="0" /><label for="sb_form_go" class="search icon tooltip" aria-label="搜索网页"><svg viewBox="0 0 25 25" enable-background="new 0 0 25 25"><path stroke="#007DAA" stroke-width="2.5" stroke-linecap="round" stroke-miterlimit="10" fill="none" d="M23.75 23.75l-9-9" /><circle stroke="#007DAA" stroke-width="2.5" stroke-linecap="round" stroke-miterlimit="10" cx="9" cy="9" r="7.75" fill="none" /><path fill="none" d="M25 25h-25v-25h25z" /></svg></label><input type="hidden" value="QBLH" name="form" /></form><a id="hpinsthk" aria-hidden="true" tabindex="-1" href="javascript:void(0);" h="ID=SERP,5065.1"><span></span></a></div></div><div class="hpl bottom_row"><div class="scroll_cont" id="scroll_cont"><footer class="footer no_mod " id="footer"><div class="footerbody "><span class="msft">&#169; 2024 Microsoft</span><ul class="items"><li class="item"><a id="ICPLicense" href="https://dxzhgl.miit.gov.cn/dxxzsp/xkz/xkzgl/resource/qiyereport.jsp?num=caf04fa4-bd8a-4d9e-80b6-2aa1b86c1509&amp;type=yreport" h="ID=SERP,5066.1">增值电信业务经营许可证:合字B2-20090007</a></li><li class="item"><a id="ICPFiling" href="https://beian.miit.gov.cn" h="ID=SERP,5067.1">京ICP备10036305号-7</a></li><li class="item"><a id="MMAIS" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802022657" h="ID=SERP,5068.1">京公网安备11010802022657号</a></li><li class="item"><a id="privacy" href="//go.microsoft.com/fwlink/?LinkId=521839" h="ID=SERP,5069.1">隐私与 Cookie</a></li><li class="item"><a id="legal" href="//go.microsoft.com/fwlink/?LinkID=246338" h="ID=SERP,5070.1">法律声明</a></li><li class="item"><a id="" href="//go.microsoft.com/fwlink/?linkid=868923" h="ID=SERP,5071.1">广告</a></li><li class="item"><a id="" href="//go.microsoft.com/fwlink/?LinkID=286759" h="ID=SERP,5072.1">关于我们的广告</a></li><li class="item"><a id="help" href="//support.microsoft.com/topic/82d20721-2d6f-4012-a13d-d1910ccf203f" h="ID=SERP,5073.1">帮助</a></li><li class="item"><a id="sb_feedback" href="#" h="ID=SERP,5074.1">反馈</a></li></ul></div></footer></div></div></div><script type="text/javascript" crossorigin="anonymous" src="https://r.bing.com/rs/6r/fU/jnc,nj/tlifxqsNyCzxIJnRwtQKuZToQQw.js?or=n"></script><script type="text/javascript" crossorigin="anonymous" src="/rp/CCDMqxaLQmaaR8fRII7Bqy0tqS8.gz.js"></script><script type="text/javascript">//<![CDATA[
_G={Region:"CN",Lang:"zh-CN",ST:(typeof si_ST!=='undefined'?si_ST:new Date),Mkt:"zh-CN",RevIpCC:"cn",RTL:false,Ver:"31",IG:"86BA75949C6B43F2A6E962F548372215",EventID:"66afb17c5b0f4f76aeb19384c5f4a65a",V:"homepage",P:"SERP",DA:"MWHE01",CID:"2D6036E6D9C565BD1E8B2237D8A36469",SUIH:"TsdsIwu-eDyAalLCXFP-KA",adc:"b_ad",EF:{bmasynctrigger:1,getslctspt:1,newtabsloppyclick:1,chevroncheckmousemove:1,sharepreview:1,shareoutimage:1,sharefixreadnum:1,sharepreviewthumbnailid:1,shareencodefix:1,infrefcflog:1,chatskip2content:1},gpUrl:"\/fd\/ls\/GLinkPing.aspx?" }; _G.lsUrl="/fd/ls/l?IG="+_G.IG+"&CID="+_G.CID ;curUrl="https:\/\/cn.bing.com\/";function si_T(a){ if(document.images){_G.GPImg=new Image;_G.GPImg.src=_G.gpUrl+'IG='+_G.IG+'&CID='+_G.CID+'&'+a;}return true;}_G.BAT="0";_G.NTT="600000";_G.RTO="172800000";_G.CTT="3000";_G.BNFN="Default";_G.LG="160";_G.FilterFlareInterval=5;;
//]]></script><script type="text/javascript" crossorigin="anonymous" src="/rp/5WG_kDsbFabhsuv_6NwDoh2LdnI.gz.js"></script><script type="text/javascript" crossorigin="anonymous" src="/rp/ACby6guiuiyuEYRTFOH8no-JKCo.gz.js"></script><script type="text/javascript" crossorigin="anonymous" src="/rp/sTqO8BLDL3SMwm5-DmlL0eodCJk.gz.js"></script><script type="text/javascript" crossorigin="anonymous" src="/rp/PVEp6LmF7FGQF4_wW3Ri1trRPv4.gz.js"></script><script type="text/javascript" crossorigin="anonymous" src="/rp/oJtq_u9TBV7TshzGOx6yvnobEEU.gz.js"></script><script type="text/javascript" crossorigin="anonymous" src="/rp/PrUVzF4hlCEHR6XAp8AR6euT5OM.gz.js"></script><script type="text/javascript" crossorigin="anonymous" src="/rp/qN3rmGYj9Qsn6JmjzmYclpmfCHI.gz.js"></script><script type="text/javascript" crossorigin="anonymous" src="/rp/omjewb8RA_1ed-86jqIwN_f_ON8.gz.js"></script><script type="text/javascript" crossorigin="anonymous" src="/rp/9RU9Mo45ZvCytDGnLCWS0LulULU.gz.js"></script><script type="text/javascript" crossorigin="anonymous" src="/rp/svYzgo4yD9vzUlVytiD-v2lepRM.gz.js"></script><script type="text/javascript" crossorigin="anonymous" src="https://r.bing.com/rb/5T/jnc,nj/Fou4y5flZC_CJaDKeDfmSjHvbYI.js?bu=BbAEtAS2BPUDnwQ&or=n"></script><script type="text/javascript" crossorigin="anonymous" src="/rp/ICf9X-WMafiZOnS_3M9RpM8994E.gz.js"></script><script type="text/javascript" crossorigin="anonymous" src="/rp/nIt_N_kpXwbKZc4NbcR2zfSrv0E.gz.js"></script><script type="text/javascript">//<![CDATA[
_w.rms.js({'A:rms:answers:Shared:BingCore.Bundle':'\/rp\/rpcyRzJEvxW5U0j4COb_L6wpZrE.gz.js'},{'A:rms:answers:Feedback:FeedbackAccessibility':'\/rp\/peNl4yUB4P3PwDM4J7NWGzi8hKM.gz.js'},{'A:AppendHTML':'https:\/\/r.bing.com\/rs\/6r\/lA\/nj\/pxzfjFIjWTDQikh0A5aT_cguYyc.js?or=n'},{'A:AjaxLoad':'https:\/\/r.bing.com\/rs\/6r\/lO\/nj\/EmG-XMIMCcq8zmcVBBO7jkFERAE.js?or=n'},{'A:rms:answers:Feedback:FeedbackBootstrapBundle':'\/rp\/aOA7a7jg_SiOo7Z1-2J6mbS36HE.gz.js'},{'A:0':0},{'A:rms:answers:BoxModel:Rules':'\/rp\/N0NZj2UoTgAcpHMO-3FYmE5C7G4.gz.js'},{'A:rms:answers:BoxModel:TriggerFirstChunk':'\/rp\/iuYNUHE3kZrz6Jrb0_Mf0yBFZN0.gz.js'},{'A:rms:answers:BoxModel:ViewportQueue':'\/rp\/8srl0LOx92Ew0yyAq2m2e33cq7I.gz.js'},{'A:rms:answers:BoxModel:LayoutQueue':'\/rp\/Mt62GUgrdySmO3Hz6WvsY51OVCM.gz.js'},{'A:rms:answers:BoxModel:EventQueue':'\/rp\/8AigLIxHhxH6NCSV3aSsPWpKiRs.gz.js'},{'A:rms:answers:BoxModel:Framework':'\/rp\/4MCFBjxWsxXmwf7cMyCurAAEJUw.gz.js'});;
//]]></script><div id="aRmsDefer"><script type="text/rms">//<![CDATA[
Feedback.Bootstrap.InitializeFeedback({page:true},"sb_feedback",1,0,0);;
//]]></script></div></body></html>

爬虫访问豆瓣 - 避开反爬虫程序

import requests
response = requests.get("https://movie.douban.com/top250")
print(response)
# 返回状态码418 表示遇到了反爬虫
# 由于豆瓣等部分网址为了让自家服务器只服务于真实用户,其拒绝了所有爬虫的请求,为了爬取这些网站的数据,我们可以模拟真实用户
<Response [418]>
# 给定请求头 模拟真实用户 避开反爬虫程序
header = {'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Mobile Safari/537.36 Edg/127.0.0.0'}
response = requests.get("https://movie.douban.com/top250",headers = header)
print(response)
# 返回状态码200 说明正常爬取到了网站数据
<Response [200]>

HTML

**说明:**通过get请求爬取到的网站数据是html,通常我们想要的只是某个网址中的部分信息,而非整个网址的数据,为了能够从html中获得我们想要的内容,我们需要对html有一定的了解

网址爬取的HTML示例

下面我们给出百度首页爬取到的html数据.在下面的每一个用<>括起来的内容我们称之为标签

<!DOCTYPE html>
<!--STATUS OK-->
<html>

<head>
    <meta http-equiv=content-type content=text/html;charset=utf-8>
    <meta http-equiv=X-UA-Compatible content=IE=Edge>
    <meta content=always name=referrer>
    <link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css>
    <title>ç™¾åº¦ä¸€ä¸‹ï¼Œä½ å°±çŸ¥é“</title>
</head>

<body link=#0000cc>
    <div id=wrapper>
        <div id=head>
            <div class=head_wrapper>
                <div class=s_form>
                    <div class=s_form_wrapper>
                        <div id=lg> <img hidefocus=true src=https://img-home.csdnimg.cn/images/20230724024159.png?be=1&origin_url=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div>
                        <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form>
                    </div>
                </div>
                <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript>
                    <script>
                        document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=' + encodeURIComponent(window.location.href + (window.location.search === "" ? "?" : "&") + "bdorz_come=1") + '" name="tj_login" class="lb">登录</a>');
                    </script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a>
                </div>
            </div>
        </div>
        <div id=ftCon>
            <div id=ftConw>
                <p id=lh> <a href=http://home.baidu.com>å
³äºŽç™¾åº¦</a> <a href=http://ir.baidu.com>About Baidu</a> </p>
                <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty />使用百度前å¿
读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=https://img-home.csdnimg.cn/images/20230724024159.png?be=1&origin_url=https://img-home.csdnimg.cn/images/20230724024159.png?be=1&origin_url=//www.baidu.com/img/gs.gif> </p>
            </div>
        </div>
    </div>
</body>

</html>

展示结果

ç™¾åº¦ä¸€ä¸‹ï¼Œä½ å°±çŸ¥é“

HTML常用标签

标题标签

【数字代表标签为几级标签,一般数字越大字体越小】

<h1> 这是一个一级标签 </h1>
<h2> 这是一个二级标签 </h2>
<h3> 这是一个三级标签 </h3>
<h4> 这是一个四级标签 </h4>
<h5> 这是一个五级标签 </h5>
<h6> 这是一个六级标签 </h6>

这是一个一级标签

这是一个二级标签

这是一个三级标签

这是一个四级标签
这是一个五级标签
这是一个六级标签

文本标签

普通文本 <p> content </p>
<p>这是一个文本标签 </p>

<p>给岁月以文明 </p>

<p>而不是给文明以岁月 </p>

这是一个文本标签

给岁月以文明

而不是给文明以岁月


换行标签<br>
<p>给岁月以文明\<br>而不是给文明以岁月 </p>

给岁月以文明
而不是给文明以岁月


加粗标签 <b> content </b>
<p>展示加粗字体:<b>加粗</b></p>

展示加粗字体:加粗


斜体标签 <i> content </i>
<p>展示斜体字体:<i>斜体</i></p>

展示斜体字体:斜体


下划线标签 <u> content </u>
图片标签 <img src [width,height] >
网址标签 <a href > 网址重定义名 </a>
  <a href='http://www.4399.com'>4399大游戏(本页打开)</a>
  <a href='http://www.4399.com' target ='_blank'>4399大游戏(新页打开)</a>

4399大游戏(本页打开)
4399大游戏(新页打开)


容器标签

div元素 一行一个 <div> contents </div>
span元素 一行可多个 <span> contents </span>

列表标签

有序列表 <ol> <li> content </li></ol>\

HTML源码

  <ol> 
  
      <li> 语文 </li>
      
      <li> 数学 </li>
      
      <li> 英语 </li>
      
  </ol>

展示结果

  1. 语文
  2. 数学
  3. 英语

无序列表 <ul> <li> content </li></ul>\

HTML源码

  <ul> 
  
      <li> 语文 </li>
      
      <li> 数学 </li>
      
      <li> 英语 </li>
      
  </ul>

展示结果

  • 语文
  • 数学
  • 英语

表格标签

HTML源码

<table>  # 表格开始标签

    <thead>  # t head 表头开始标签(一般为表格第一行的表头)
    
        <tr>  # t row 表格行标签
        
            <td>表头1</td>  # t data 表格内容标签
            
            <td>表头2</td>
            
        </tr>
        
    </thead>
    
    <tbody>  # t body 表格主体标签(一般为表格内容)
    
        <tr>
        
            <td>Value11</td>  # 表格内容标签
            
            <td>Value12</td>
            
        </tr>
        
        <tr>
        
            <td>Value21</td>
            
            <td>Value22</td>
            
        </tr>
        
    </tbody>
    
</table>  # 表格结束标签

展示结果

表头1表头2
Value11Value12
Value21Value22

HTML案例

<!DOCTYPE html>
<html>
    <head>
        <title>网页浏览器显示的标题</title>
    </head>
    <body>
        <h1>Python</h1>
        <h2>爬虫学习</h2>
        <p><b>学习时间:</b><br><i>2024年08月04日</i></p>
        <img scr='https://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA1ocyJX.img?w=612&h=399&m=6' width='200px'>
        <a href='http://www.4399.com'>4399大游戏(本页打开)</a>
        <a href='http://www.4399.com' target ='_blank'>4399大游戏(新页打开)</a>
        <span>
            <p>测试数据1</p>
        </span>
        <span>
            <p>测试数据2</p>
        </span>
        <div>
            <p>测试数据1</p>
            <p>测试数据2</p>
        </div>
        <table>
    <thead>
        <tr>
            <td>姓名</td>
            <td>语文</td>
            <td>数学</td>
            <td>英语</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>小明</td>
            <td>92</td>
            <td>99</td>
            <td>98</td>
        </tr>
        <tr>
            <td>小帅</td>
            <td>87</td>
            <td>60</td>
            <td>58</td>
        </tr>
    </tbody>
</table>
    </body>
</html>

展示结果

网页浏览器显示的标题

Python

爬虫学习

学习时间:
2024年08月04日

4399大游戏(本页打开) 4399大游戏(新页打开)

测试数据1

测试数据2

测试数据1

测试数据2

姓名语文数学英语
小明929998
小帅876058

Beautiful Soup HTML解析库

说明:
我们通过之前的学习可以发现,爬取到的html可能会很复杂,很难看懂,因此我们借助bs4库中的BeautifulSoup帮助我们完成对HTML的解析以及内容的查找

安装

pip install bs4

使用

from bs4 import BeautifulSoup
import requests

content = requests.get('http://books.toscrape.com/').text
soup = BeautifulSoup(content,'html.parser')

# 获取第一个指定类型的标签元素
print('获取到的数据中第一个文本标签是\n',soup.p) # 获取第一个文本标签元素
print('获取到的数据中第一个一级标签是\n',soup.h1)

# 根据条件查找全局中所有符合要求的元素
print('使用findAll查找元素')
all_prices = soup.findAll('p',attrs={'class':'price_color'})
for i in all_prices:
    # print(i) # 默认返回的是标签
    print(i.string) # 使用标签的string属性返回元素内容
获取到的数据中第一个文本标签是
 <p class="star-rating Three">
<i class="icon-star"></i>
<i class="icon-star"></i>
<i class="icon-star"></i>
<i class="icon-star"></i>
<i class="icon-star"></i>
</p>
获取到的数据中第一个一级标签是
 <h1>All products</h1>
使用findAll查找元素
£51.77
£53.74
£50.10
£47.82
£54.23
£22.65
£33.34
£17.93
£22.60
£52.15
£13.99
£20.66
£17.46
£52.29
£35.02
£57.25
£23.88
£37.59
£51.33
£45.17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NUDTer2026

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值