首次接觸爬蟲,這個程序可以讓初學者明白爬蟲是啥,爬蟲的基本邏輯。
(參照網(wǎng)易云課堂heibanke老師的程序編寫的。heibanke老師的課程講得很清楚,感興趣的選手可以去看看)
被爬蟲的網(wǎng)址是
http://www.heibanke.com/lesson/crawler_ex00/
需要完成的任務是在網(wǎng)址后面輸入顯示的數(shù)字轉(zhuǎn)入下一個網(wǎng)址,再次讀取顯示的數(shù)字,轉(zhuǎn)入下一個網(wǎng)址,以此循環(huán)
爬蟲要求
在爬蟲的時候需要需要用到兩個庫,一個urllib,一個BeautifulSoup,urllib為python自帶的庫,beautifulsoup需要自己安裝
pip install beautifulsoup4
安裝成功后導入
import urllib
from bs4 import BeautifulSoup
urllib提供了一系列用于操作URL的功能
打開要爬取得網(wǎng)站:
urllib.urlopen(url)
beautifulsoup主要用于解析HTML,將 HTML轉(zhuǎn)化成數(shù)型結(jié)構(gòu),每個節(jié)點都是Python對象。
所有對象可以歸納為4種:
1.Tag
2.NavigableString
3.BeautifulSoup
4.Comment
如果一個HTML為
<html>
<[head])>
<title>
The Dormouse's story
</title>
print soup.title
>>><title>The Dormouse's story</title>
print soup.title.string
>>>The Dormouse's story
程序邏輯:
讀出頁面上的數(shù)字,將數(shù)字加在url后面,繼續(xù)讀取新頁面的數(shù)字,直到進入最后一個沒有數(shù)字的頁面,break
程序如下:
import urllib
from bs4 import BeautifulSoup
import re#這個庫導入是為了使用正則表達式讀取讀取找到的內(nèi)容中的數(shù)字
url='http://www.heibanke.com/lesson/crawler_ex00/'
number=['']#用于儲存讀到的數(shù)字
while True:
content = urllib.urlopen(url+number[0])#number為字符串,number[0]為數(shù)字
bs_obj = BeautifulSoup(content,"html.parser")#html.parser表示解析網(wǎng)站,不返回任何值
number = bs_obj.h3.string#網(wǎng)頁顯示出的“你需要在網(wǎng)址后輸入數(shù)字44513”在html的h3 tag中,number在這里讀出了h3里面的內(nèi)容
number= re.findall(r'\d+',number)#讀出了number里面的數(shù)字
if not number:#必須判斷頁面中還有是否還有number,沒有說明已經(jīng)到了最后一個頁面,這時應該跳出循環(huán),打印 bs_obj.h3.string
break
else:
print number[0]
print bs_obj.h3.string