<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一文快速學(xué)會(huì) Python 基礎(chǔ)爬蟲(chóng)!

          共 2191字,需瀏覽 5分鐘

           ·

          2020-12-09 23:20

          推薦閱讀??點(diǎn)擊標(biāo)題可跳轉(zhuǎn)

          新手怎么100天入門(mén)Python?

          前言

          剛學(xué)完python基礎(chǔ),想學(xué)習(xí)爬蟲(chóng)的新手,這里有你想要的東西。


          本文著重點(diǎn)在于教新手如何學(xué)習(xí)爬蟲(chóng),并且會(huì)以外行人的思維進(jìn)行形象地講解。最近我一兄弟想學(xué),我就想寫(xiě)個(gè)教學(xué)給他,然后想不如分享到網(wǎng)絡(luò)上,給熱愛(ài)學(xué)習(xí)的人們一起學(xué)習(xí)探討。




          環(huán)境安裝

          python3.7.1


          pip install requests

          pip install beautifulsoup4

          pip install lxml


          技術(shù)講解

          requests庫(kù)


          requests一般用于發(fā)起http請(qǐng)求,并且拿到請(qǐng)求的結(jié)果。http常用的請(qǐng)求有兩種,GET和POST,爬蟲(chóng)主要用的是GET請(qǐng)求。


          在不懂http,https和dns,TCP/IP等協(xié)議的情況下,我直接打個(gè)比方來(lái)解釋一下什么是GET請(qǐng)求,以360瀏覽器為例,人在360瀏覽器輸入www.baidu.com,然后敲擊enter鍵,直到頁(yè)面出現(xiàn),整個(gè)過(guò)程,我們可以抽象為我們向百度服務(wù)器發(fā)起的一次GET請(qǐng)求。


          更專業(yè),更詳細(xì)的解釋,自己去百度學(xué)習(xí)吧。


          如何使用requests庫(kù)來(lái)模擬瀏覽器的行為來(lái)獲取頁(yè)面內(nèi)容呢?


          示例代碼如下

          import?requests
          web?=?requests.get('https://www.baidu.com')??#向百度發(fā)起一次get請(qǐng)求,返回請(qǐng)求結(jié)果的實(shí)體類(lèi)
          print(web.status_code)????#請(qǐng)求返回的狀態(tài)碼,200是OK,404是頁(yè)面不存在,500是錯(cuò)誤,更多自己百度搜索
          print(type(web.content))????#頁(yè)面內(nèi)容的數(shù)據(jù)類(lèi)型是bytes,因此需要解碼
          print(type(web.content.decode()))
          print(web.content.decode())????#解碼之后,得到的頁(yè)面內(nèi)容是結(jié)構(gòu)化的字符串


          這樣看起來(lái),我們獲取到的頁(yè)面內(nèi)容不是我們?cè)跒g覽器看到的圖形化界面,而是字符串,更像是一些代碼。如果你學(xué)過(guò)html和css那就不用多說(shuō)了。沒(méi)學(xué)過(guò)也不要緊,現(xiàn)在可以簡(jiǎn)單學(xué)一下,也就花幾分鐘了解一下就夠用了。


          html是一種標(biāo)記語(yǔ)言,可以被瀏覽器執(zhí)行,然后呈現(xiàn)出可視化的圖形界面。如果你把web.content.decode()這一串字符串保存在test.html里,然后雙擊打開(kāi),你會(huì)看到圖形化界面的,只不過(guò)有些圖片可能顯示不了,這里就不細(xì)說(shuō)了。


          html其實(shí)很好理解,不要想得太復(fù)雜,就是一段有規(guī)律的格式化的文本。


          其基本格式就是


          <html>

          <head>...head>

          <body>...<body>

          <script>...script>

          <style>...style>

          html>


          html文本的標(biāo)簽一般都是成雙成對(duì),有始有終的,比如和是一隊(duì),千萬(wàn)不能拆散,拆散就亂套了。少數(shù)除外比如
          是換行用的,可以不用配對(duì)。


          這里我們主要講body標(biāo)簽,網(wǎng)頁(yè)的主要內(nèi)容都是在這個(gè)標(biāo)簽里顯示的,比如標(biāo)題,段落,圖片等


          在test.html里我們寫(xiě)入一下代碼并且保存。

          <html>

          <body>

          <h1>我的網(wǎng)站h1>

          <p>這是我的網(wǎng)站p>

          body>

          html>


          beautifulsoup4庫(kù)


          bs4(簡(jiǎn)稱)庫(kù)是用于解析格式化文本,提取數(shù)據(jù)用的庫(kù)。


          我們利用requests庫(kù)的get函數(shù)拿到網(wǎng)頁(yè)的內(nèi)容是一段格式化的字符串,接下來(lái)就可以用bs4來(lái)解析它。


          解析的示例代碼如下


          from?bs4?import?BeautifulSoup

          html?=?'''



          我的網(wǎng)站



          這是我的網(wǎng)站





          '''
          ????#從網(wǎng)頁(yè)拿到html的格式化的字符串,保存到html里

          soup?=?BeautifulSoup(html,?'lxml')????#使用lxml解析器來(lái)解析文本,html和xml格式是類(lèi)似的

          print(soup.find_all('h1'))????#使用find_all函數(shù)來(lái)找所有的h1標(biāo)簽,返回的結(jié)果是數(shù)組

          print(soup.find_all('p'))????#找所有的p標(biāo)簽,返回的結(jié)果是數(shù)組



          更復(fù)雜一點(diǎn)的,比如



          from?bs4?import?BeautifulSoup

          html?=?'''



          我的網(wǎng)站



          這是我的網(wǎng)站





          測(cè)試1





          測(cè)試2





          '''

          soup?=?BeautifulSoup(html,?'lxml')

          div_tags?=?soup.find_all(name='div',?attrs={'class':?'test-item'})

          for?tag?in?div_tags:

          ????print(type(tag))

          ????print(tag)

          ????print(tag.string)

          ????print(tag.attrs,?'\n')


          注意,tag保存的不是字符串,而是bs4模塊中的一個(gè)標(biāo)簽實(shí)體類(lèi),我們主要需要知道它的attrs屬性和string屬性,方便我們拿到一些我們想要的文本和信息,比如a標(biāo)簽的href屬性就保存在attrs里。


          總結(jié)

          本文主要講了如何使用requests獲取網(wǎng)頁(yè)文本內(nèi)容,以及如何解析html文本,更多更好用的爬蟲(chóng)庫(kù)。

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

          *聲明:本文于網(wǎng)絡(luò)整理,版權(quán)歸原作者所有,如來(lái)源信息有誤或侵犯權(quán)益,請(qǐng)聯(lián)系我們刪除或授權(quán)事宜


          瀏覽 60
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  影音先锋亚洲无码在线观看 | 一级婬片A片试看50分钟 | 青娱乐在线视频精品 | 精品91秘 一区二区三区 | 伊人久久成人 |