1. 程式人生 > >爬蟲基礎-1-爬取小說資源

爬蟲基礎-1-爬取小說資源

小生部落格:http://xsboke.blog.51cto.com

小生 Q Q:1770058260

                    -------謝謝您的參考,如有疑問,歡迎交流

使用BeautifulSoup爬取網站資源

注:此文僅供學習參考,如果該網站平凡文學負責人有異議,請留言,作者將刪除此文章有關平凡文學的所有資訊.

BeautifulSoup簡介:

我的理解:BeautifulSoup就是用來解析Html的模組,詳細資訊還請參考BeautifulSoup4.2.0 中文文件

隨便找了一個小說網站,沒有爬取文章內容,主要是理解一下BeautifulSoup4的使用方法,如果搞懂本文了,爬取文章都不是問題.

程式碼最後生成一個字典如下:

{'玄幻':[['書名1','作者1','書連結1'],
         ['書名2','作者2','書連結2']
       ],
 '恐怖':[['書名1','作者1','書連結1'],
         ['書名2','作者2','書連結2']
       ]
}

程式碼正文:

請安裝requests和bs4(BeautifulSoup)


from bs4 import BeautifulSoup
import requests,sys
sys.setrecursionlimit(10000)  # 防止超出遞迴深度報錯

Url_Index = 'http://m.pfwx.com'

r = requests.get(Url_Index)
r.encoding = 'utf-8'
content = r.text
soup = BeautifulSoup(content,features='html.parser')

target = soup.find('div',class_='nav') # 只獲取第一個包含class='nav'屬性的div標籤
tar = target.find_all('a')  # 過濾出a標籤

# 獲取index的欄目
Index_Menu = {}
for so in tar:
    TEXT = so.get_text()
    HREF = Url_Index + so['href']       # 獲取href屬性的值
    Index_Menu[TEXT] = HREF

# 獲取分類
Class_Page = Index_Menu['分類']
r = requests.get(url=Class_Page)
r.encoding = 'utf-8'
content = r.text
soup = BeautifulSoup(content,features='html.parser')
tag = soup.body.find_all('li',class_='prev')
Menu = {}
for so in tag:
    TEXT = so.get_text() # 獲取文字
    HREF = so.a.attrs['href'] # 獲取a標籤中的href屬性
    # 生成各個分類的Url
    Category_Url = Url_Index + HREF
    Menu[TEXT] = Category_Url

# 獲取每種分類的書資訊
for ClassName in Menu:
    Book_List = []
    def make(url):
        '''獲取所有的書資訊,並且交給函式IF判斷是否還有下一頁,如果有則繼續獲取書的資訊'''
        r = requests.get(url=url)
        content = r.text
        soup = BeautifulSoup(content, features='html.parser')
        target = soup.find_all('a', class_='blue')
        for so in target:
            BookName = so.get_text()                        # 書名
            IMHOW_NAME = so.next_sibling.split('/')[1]  # 作者名
            HREF = Url_Index + so['href']               # 書的連結
            Book_List.append([BookName,IMHOW_NAME,HREF])

        Next_Page = soup.find('div', class_='page')
        IF(NextPage=Next_Page)

    def IF(NextPage):
        '''判斷是否還有下一頁,如果有則繼續迴圈'''
        for Page in NextPage.find_all('a'):
            if Page.get_text() == '下頁':
                '''判斷如果還有下頁,則繼續獲取書的資訊'''
                Url = Url_Index + Page['href']
                make(url=Url)

    url=Menu[ClassName] # 獲取當前分類的URL
    make(url) # 獲取當前分類的所有書資訊
    Menu[ClassName] = Book_List # 最後生成的資訊都在這個字典裡面;格式{'玄幻':[['書名1','作者1','書連結1'],['書名2','作者2','書連結2']]}