前言文的文字及圖片來源于網(wǎng)絡(luò),僅供學(xué)習(xí)、交流使用,不具有任何商業(yè)用途,版權(quán)歸原作者所有,如有問題請及時聯(lián)系我們以作處理。 作者:NicePython PS:如有需要Python學(xué)習(xí)資料的小伙伴可以加點擊下方鏈接自行獲取http:///A6Zvjdun 運行環(huán)境
運行依賴包
爬蟲可以簡單的分為:
簡單來說一個網(wǎng)頁是由一個html文件解析構(gòu)成,我們需要獲取這個文本內(nèi)容。 每個瀏覽器都可以通過開發(fā)者工具獲取到文本內(nèi)容,以chrome為例,打開網(wǎng)頁后,右鍵->檢查。 右邊的 Elements 就是我們要下載的數(shù)據(jù)。 讓我們看看 requests 是如何獲取這個數(shù)據(jù)的。
url='http:///'; html=requests.get(url); if html.status_code == 200: html_bytes=html.content; html_str=html_bytes.decode(); 上面的 html_str 就是我們需要的源數(shù)據(jù)。獲取數(shù)據(jù)我們需要一個網(wǎng)頁地址,獲取后判斷狀態(tài)碼是否為200,最后再將內(nèi)容decode就得到需要的整個html源數(shù)據(jù)。
這次我們用正則表達(dá)式去解析源數(shù)據(jù),截取到我們需要。關(guān)于詳細(xì)的正則知識可以在這篇文章史上最全面的正則表達(dá)式教程中學(xué)習(xí)。 現(xiàn)在我們的目標(biāo)是抓取博客的文章標(biāo)題和鏈接,我們可以通過剛才的開發(fā)者工具獲取文章標(biāo)題和鏈接的特征。 可以看到我們要的內(nèi)容都具有以下這種格式。 <a href="鏈接"> <h2 class="post-title"> 標(biāo)題 </h2> xxxxxx </a> 我們就為這種格式寫出正則表達(dá)式。(ps: 我也寫了幾次才寫對,看不懂的話我們私下交流交流 ) regex = r"<a href=\"(.*)\">[\s]*?<h2 class=\"post-title\">[\s]*(.*)[\s]*</h2>[\s\S]*?</a>" 使用正則表達(dá)式中的 findall 把所有內(nèi)容找出來,并保存在字符串中。 write_content = '' all_items = re.findall(regex,html_str); for item in all_items: write_content=f'{write_content}\n{item[1]}\nhttp://{item[0]}\n' 但是,我們只爬了其中的一頁。還有許多頁沒有爬呢!(ps: 驕傲臉,我已經(jīng)寫了好多??頁的原創(chuàng)內(nèi)容了。) 我們可以點幾個下一頁,很容易發(fā)現(xiàn)其中的規(guī)律。 - 第一頁:http:/// - 第二頁:http:///page2/ - 第三頁:http:///page3/ ... 為此,我們加個循環(huán)判斷就可以啦。 index=1 while True: page_url = ''; if index>1: page_url=f'page{index}/' url=f'http:///{page_url}'; html=requests.get(url); if html.status_code != 200: print(html); break; 在判斷狀態(tài)碼為200時,退出循環(huán)。
這次我們就用文本存儲來結(jié)束我們的教程吧。 with open('lamyoung_title_out.txt','w',encoding='utf-8') as f: f.write(write_content) 最后看下輸出結(jié)果吧~
|
|