<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>

          python爬取個人博客園博客列表

          共 3840字,需瀏覽 8分鐘

           ·

          2021-10-20 14:51

          前言

          昨天和幾個小伙伴小聚了一下,但是由于我的失誤,導致諸事不順出門忘看老黃歷了(逛公園,到門口閉園了;往回走,公交站不好找,走了好多冤枉路),然后手機沒電了,地鐵還停了,回到家也已經(jīng)不早了,所以昨天就放鴿子了,但是今天呢,不能再繼續(xù)鴿了,然后我就打算分享一些比較輕松的內(nèi)容,于是就有了今天的內(nèi)容。

          安裝配置python

          這里我們簡單介紹下python的安裝配置,原本是不打算講的,但是我看了下,之前我好像也沒有分享過,所以這里就簡單說下,也是幫助那些沒有python基礎的小伙伴,能夠盡快上手。

          下載安裝

          安裝版本這里推薦3.0及以上,我這里安裝的是3.9,2.7雖然也可以,但是不推薦,官方推薦的也是3.0版本。這兩種版本在很多函數(shù)和寫法上并不通用,所以代碼也不通用,有興趣的小伙伴可以看下區(qū)別,這里我不打算展開分享。

          安裝方式有很多,用win10的小伙伴可以直接在應用商店搜索安裝,但這里并不推薦這種方式,因為這種方式不好找python安裝路徑,特別是對windows平臺不是特別熟悉的小伙伴:

          另外一種安裝方式就是官網(wǎng)下載,然后安裝:

          官方最新版本是3.10,如果覺得官方網(wǎng)站下載慢的話,可以去華為鏡像站下載,選擇對應的版本即可(華為好像沒有3.10版本的):

          https://repo.huaweicloud.com/python/

          安裝過程很簡單,這里就不講了,雙擊exe,然后一直下一步就好了。

          配置

          安裝完成后,我們需要對python設置一些環(huán)境變量。首先,打開python安裝路徑,如果不知道可以搜下python,然后打開文件路徑即可:

          打開之后其實還不是安裝位置,還需要再次右鍵打開安裝路徑:

          然后才是真正的安裝路徑(我這里就是在應用市場下載的,看這路徑是不是不好找):

          然后打開環(huán)境變量設置,添加兩個環(huán)境變量設置:

          #?安裝目錄,也就是python.exe所在路徑
          C:\Users\syske\AppData\Local\Programs\Python\Python39?
          #?安裝目錄下scripts路徑,這個目錄下存放了pip等管理工具
          C:\Users\syske\AppData\Local\Programs\Python\Python39\Scripts

          這里需要注意的是,環(huán)境變量要設置在系統(tǒng)變量的path下面,否則如果是用戶變量則無法被識別(也可能是我操作方式不對,但是系統(tǒng)變量肯定是可以的):

          驗證

          安裝完成后,重新打開一個新的cmd窗口,輸入python命令,如果顯示如下在,則表明已經(jīng)安裝配置完成,否則配置有問題:

          然后再執(zhí)行了經(jīng)典的hello world試下:

          當然,還需要測試下pip是否配置ok,這個工具是用了管理python的依賴庫的:

          至此,python環(huán)境搭建完成。

          爬取博客列表

          準備工作

          這里主要是安裝我們爬蟲要依賴的第三方依賴庫。

          安裝requests庫,這個庫的作用是向我們的目標地址發(fā)送請求,并拿到響應內(nèi)容,比如html內(nèi)容

          ?pip?install?requests

          安裝beautifulsoup4庫,這個庫的作用就是解析響應的html內(nèi)容。目前我也僅用它來解析html內(nèi)容,所以其他內(nèi)容暫時未知

          pip?install?beautifulsoup4

          安裝lxml庫,這個庫是bs4庫(也就是我們的soup庫要依賴的)

          pip?install?lxml

          如果沒有這個庫,在解析html的時候會報如下錯誤

          最終完成效果

          簡單來說,就是我們想通過這個爬蟲,拿到我的個人博客的所有列表,包括標題和鏈接地址,這里我是直接生成了一個markdown文檔,所以鏈接的效果就是markdown的可點擊鏈接,最終的效果

          如下:

          頁面源碼

          首先我們要先分析要抓取的頁面html,確定具體解析方案:

          從頁面源碼可以看出來,我們其實只需要拿到classpostTitlediv,然后解析其中的文字內(nèi)容及a標簽的url即可,所以下面的實現(xiàn)就是基于這個思路展開的。

          實現(xiàn)過程

          下面我們看下具體的爬取代碼。其實整個代碼確實很簡單,當然這也是很多人喜歡用python寫腳本的原因,簡簡單單幾行代碼,就可以實現(xiàn)其他語言整個項目的功能(比如java,當然性能上python沒有任何優(yōu)勢),真的是生產(chǎn)力提升利器。

          這里最核心的一句代碼是:

          for?tag?in?soup.find_all('div',?class_='postTitle'):

          再精簡一下是:

          soup.find_all('div',?class_='postTitle')

          也就是soupfind_all,從soup的文檔中,我們可以得知,通過這個方法我們可以拿到soup下的相關(guān)tag對象。這個方法有四個參數(shù):

          • name 參數(shù)可以查找所有名字為 nametag,字符串對象會被自動忽略掉。例如:soup.find_all('div'
          • attrs:可以通過屬性搜索,例如:soup.find_all('div', class_='postTitle')
          • recursive:這個暫時沒用到,還沒研究
          • string:沒研究
          • keywords:包括關(guān)鍵字的內(nèi)容,也沒研究

          關(guān)于soup可以小伙伴可以去詳細看下文檔,我也沒有搞得特別清楚,所以暫時就先不說了。

          然后下面就是完整的實現(xiàn)過程了:

          #?引入?requests庫
          import?requests;
          #?從bs4庫中引入BeautifulSoup
          from?bs4?import?BeautifulSoup;
          #?引入正則表達式依賴
          import?re;
          #?引入文件相關(guān)依賴
          import?os;
          #?全局變量,主要是為了生成序號,方法內(nèi)部最后一個賦值很重要,沒有這個賦值,會導致序號不連續(xù)
          global?index;

          #?定義了一個方法,這個方法就是為了循環(huán)遍歷我的博客,文件就是我們要保存的文件
          def?get_blog_list(page,?index,?file):
          ??#?通過requests發(fā)送請求,這里用到了字符串的格式化
          ??r?=?requests.get('https://www.cnblogs.com/caoleiCoding/default.html?page={}'.format(page));
          ??#?打印返回結(jié)果
          ??print(r.text);
          ??#?用soup庫解析html,如果沒有安裝lxml庫,會報錯
          ??soup?=?BeautifulSoup(r.text,'lxml');
          ??
          ??#?搜索class屬性為postTitle的div
          ??for?tag?in?soup.find_all('div',?class_='postTitle'):
          ????print(tag);
          ????#?tag的span標簽的內(nèi)容
          ????content?=?tag.span.contents;
          ????#?過濾掉置頂內(nèi)容,這塊的結(jié)構(gòu)和其他內(nèi)容不一樣,匹配需要寫正則,太復雜,所以先忽略掉
          ????if?index?==?0?and?page?==?1:
          ??????index?+=?1;
          ??????continue;
          ????print(content)
          ????#?獲取span的內(nèi)容,也就是文本內(nèi)容
          ????title?=?next(tag.span.children)
          ????print(str(title));
          ????#?替換其中的換行符和空格
          ????title?=?title.replace('\n',?'').strip();
          ????print(title);
          ????#?獲取tag下的a標簽的href,也就是我們的博客地址
          ????url?=?tag.a['href']
          ????print(tag.a['href']);
          ????#?通過字符串格式化寫入解析的內(nèi)容
          ????file.write('{}.?[{}]({})\n'.format(index,?title,?url));
          ????#?序號自增
          ????index?+=?1;
          ????#?給全局變量賦值
          ????inedx?=?index;
          ????
          if?__name__?==?"__main__":
          ??#?初始化全局變量
          ??index?=?0;
          ??#?定義我們的markdwon文件,模式為寫,如果沒有的話,會新增
          ??file?=?open('syske-blog-list.md',?'w')
          ??#?我現(xiàn)在的包括是60頁,這里是循環(huán)獲取
          ??for?page?in?range(59):
          ????get_blog_list(page?+?1,?index,?file);

          總結(jié)

          今天我們就是對python腳本爬蟲的一次簡單應用演示,當然也希望能通過這個示例激發(fā)各位小伙伴學習python的興趣,畢竟它也算是一個比較高效的生產(chǎn)力工具,如果學的好了,你可以用它來處理日常工作中的各類問題,包括數(shù)據(jù)統(tǒng)計、數(shù)據(jù)處理、批量業(yè)務處理,還有像今天這樣簡單抓取數(shù)據(jù),當然,你如果學的好了,你可以用它做任何事,搶票呀、下載短視頻,甚至是爬取小電影、小姐姐圖片等。

          好了,今天的內(nèi)容就到這里吧,再晚點今天就發(fā)不出去了,各位小伙伴,晚安吧!

          - END -


          瀏覽 46
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  东京热最新网址 | 欧美天天干天天女人 | 国产精品不伦不卡在线观看 | 欧美午夜精品久久久久 | 韩国三级片网站播放 |