Python爬取百度百科 !付費文檔同樣爬!

寫在前面的話

首先呢,這是本文作者第一次發關於技術的文章,如有不足還請大家指出。

另外,我們這一次使用的 IDE(集成開發環境)是 PyCharm,其他的還請大家自行研究了。

任務簡介

利用 python 爬取百度百科的任何一個詞條的簡介,在本文中我們將瞭解爬蟲的幾個庫的基本使用方法,例如 bs4 (BeautifulSoup),requests 等等,可以這麼說,學完這一篇文章,你就可以爬取一些靜態網頁的東西了,是不是很興奮呢,那就讓我們趕快開始吧!(在這裡我提醒一下各位,最好還是要自己手敲哦!)

開始正文

Python學習交流群:1004391443,這裡是python學習者聚集地,有大牛答疑,有資源共享!小編也準備了一份python學習資料,有想學習python編程的,或是轉行,或是大學生,還有工作中想提升自己能力的,正在學習的小夥伴歡迎加入學習。

首先呢,大家需要引進幾個庫:

from bs4 import BeautifulSoup
import requests
import os
from time import sleep

ps.有些庫屬於第三方庫,需要用pip安裝哦:

 pip install 安裝庫的名字

各位不知道成功了沒有呢,讓我們繼續吧!

好的,咱們先打開百度百科的首頁,隨便搜一個關鍵詞,看一看上邊的網址有什麼變化呢?


Python爬取百度百科 !付費文檔同樣爬!


一個還看不出來,咱們再搜一個:


Python爬取百度百科 !付費文檔同樣爬!


看見木有上面的那個網址!!!除了我畫黃的部分和後面的那一串字符跟上面不一樣其餘的都一樣!!!那你可能就會說了,那我怎麼可能會知道後面的那一串字符是什麼呀,這可怎麼辦呢?如果光輸入關鍵詞就可以查詢該多好呀!行,既然想了,那咱們就試試:


Python爬取百度百科 !付費文檔同樣爬!


沒錯,我沒有寫後面的東西,咱們看下結果:


Python爬取百度百科 !付費文檔同樣爬!


不可思議!竟然成功了!那接下來的事情就好辦了

我們就可以使用字符串拼接功能把前面的

“https://baike.baidu.com/item/”

和用戶輸入的內容組成在一起,代碼如下:

url = ‘https://baike.baidu.com/item/’ + input(‘請輸入您要查詢的關鍵詞’)

下面就是最最重要的一個步驟——添加頭部信息

我們都知道,既然有爬蟲,那就必定有反爬蟲,普通的反爬蟲一般都是通過辨別頭部信息來進行反爬,如果你不偽裝一下的話,就相當於明目張膽地告訴反爬蟲系統:我是爬蟲!你們來抓我呀!!

所以只有把自己的頭部信息給偽裝一下,讓反爬系統認為:哦!你原來就是一個普通的瀏覽器。才行,代碼如下:

header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 Safari/537.36'}
#我們使用的頭部信息(防止反爬蟲阻礙我們搞事情)

接下來就是最激動人心的時刻了,我們的 requests 要登場了!

在我們的這個小程序裡面,requests 的主要任務是幫我們 get 一下網頁的源代碼,話不多說,代碼放出:

url_get = requests.get(url,headers = header)

上面我們調用了兩個變量

1.url(就是保存網址的

2.header(就是保存頭部信息的,把他的內容給了一個叫做 headers 的參數,很暈,是不?)

好了這時候咱們 print 一下 url_get(哦,對了,這裡說一下哈,如果想查看源代碼的話,需要在 print 的括號裡面填上 .text )

好,給大家看一下結果:


Python爬取百度百科 !付費文檔同樣爬!


WHAT!!!怎麼可能會是這樣!就算源代碼再醜也不可能是這些奇奇怪怪的???


Python爬取百度百科 !付費文檔同樣爬!


就這樣,這個項目就因為這個 bug 被擱置了,後來。。。。我正在逛 CSDN,忽然看見了解決方法,於是又把這個項目撿起來了呵呵呵。原來,在網頁源代碼的第8行裡,它的編碼竟然是utf-8!


Python爬取百度百科 !付費文檔同樣爬!


按照 CSDN 大神的指示,應該把 utf-8 的編碼換成 gb2312

行,聽你的,我換!代碼如下:

url_decode = url_get.content.decode(“utf-8″,”ignore”).encode(“gb2312″,”ignore”) 
#utf-8為網頁編碼,把它轉換成gb2312

另外,我們也接著設置一下解析器:

url_soup = BeautifulSoup(url_decode,’html.parser’)

好啦!!!咱們 print 一下,看是不是真正的弄好了呢?


Python爬取百度百科 !付費文檔同樣爬!


啊,哈哈哈哈哈哈哈哈,總算把編碼問題搞定了,下面開始進行數據清理!

數據清理,數據清理,顧名思義就是要把不要的東西剔除掉,那怎麼剔除呢?

其實非常簡單(不過要深入的話還是比較難的)

咱們先來看一下獲取到的源代碼,裡面的東西那麼多,但其實我們只需要下面這一行的內容:


Python爬取百度百科 !付費文檔同樣爬!


所以我們就可以運用到find這個功能,看代碼:

url_meta = url_soup.find(‘meta’, attrs={‘name’:’description’})

這句話的意思就是從源代碼中找出一個帶有meta標籤的東西,並且還還有一個屬性叫做 name,他的參數是 description

好啦,到此為止,我們的核心代碼部分就完成啦,相信聰明的你肯定能猜到接下來要幹什麼啦,那當然就是:

print(url_meta)


Python爬取百度百科 !付費文檔同樣爬!


哈哈哈哈,運行成功!前頭突發奇想弄了段奇葩代碼,嘻嘻!

本文中所有的源代碼:

from bs4 import BeautifulSoup
import requests
import os
from time import sleep
#溫馨提示
print('由於技術原因,有一點障礙沒有突破,還請各位多多諒解(本人在最後放了一個彩蛋,你們可以去看一看哦!)')
sleep(1)
#來一段逗X程序
print('歡迎使用全國最大的百科網站,百度百科的檢索工具,您可以輸入任何的詞語,我們的服務器都會在最快的時間內幫您找到他的解釋')
print('程序正在自檢........')
sleep(2)
print('滴!程序自檢成功,正在裝載至內存,可能需要1~2秒鐘,請稍等................')
sleep(1)
print('程序裝載成功,已開啟')
#好,開始說正事
url = 'https://baike.baidu.com/item/' + input('請輸入您要查詢的關鍵詞')
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 Safari/537.36'}#我們使用的頭部信息(防止反爬蟲阻礙我們搞事情)
url_get = requests.get(url,headers = header)
url_decode = url_get.content.decode("utf-8","ignore").encode("gb2312","ignore") #utf-8為網頁編碼,把它轉換成gb2312
url_soup = BeautifulSoup(url_decode,'html.parser')
#主要任務完成,開始進行數據清理
url_meta = url_soup.find('meta', attrs={'name':'description'})
#好啦,大功告成!再來一個print就可以啦!
print(url_meta)
sleep(10)
print('Finished!')

相關推薦

推薦中...