天天看點

初學Python爬蟲:爬取B站某個詳情頁的所有标題

初學Python爬蟲:從入門到爬取B站某個詳情頁的所有标題

新人一個,請大佬們多多包容。

如有錯誤,敬請指正。

前期準備:

兩個包:urllib、xlwt

指令訓示符中pip install解決~

課程要用到爬蟲,是以先行做個學習吧。

百度搜尋“Python爬蟲”,很容易就出來這個文章:

[Python]新手寫爬蟲全過程(已完成)

感覺不錯,裡面是一個分析網頁代碼,然後爬取的,剛好之前接觸過網頁制作,而且沒接觸過的人按F12也很友善~

最重要的是,它提供的網站真是超級容易爬。。

提供的網站

推薦看看以後繼續。

我隻弄了前面三個函數出來,因為後面的有一些bug,如果你是Python3,import urllib可能還不足夠,改成

import urllib.request
           

就可以了。

你可能會在這個代碼中遇到亂碼問題,問了一下百度,改進了他的getHtml函數,代碼如下:

def getHtml(url):
    #擷取網頁内容
    page=urllib.request.urlopen(url)
    html = page.read().decode("utf-8")
    return html
           

對的,加個decode就行了。

然後做了适當的變化,我開始手癢了,打算爬這個網站上一級的标題。

上一級的網站

代碼如下:

import urllib.request


######
# 爬蟲v0.1 利用urlib 和 字元串内建函數
######
def getHtml(url):
    # 擷取網頁内容
    page = urllib.request.urlopen(url)
    html = page.read().decode("utf-8")
    return html

def content(html):
    # 内容分割的标簽
    str = '<div class="content">'
    content = html.partition(str)[2]
    str1 = '</div>'
    content = content.partition(str1)[0]
    return content # 得到網頁的内容


def title(content, beg=0):
    # 比對title
    # 思路是利用str.index()和序列的切片
    try:
        title_list = []
        while True:
            num1 = content.index('target="_blank"', beg)+16
            num2 = content.index('</a>', num1)
            title_list.append(content[num1:num2])
            beg = num2

    except ValueError:
        return title_list

content = content(getHtml("https://bh.sb/post/category/main/"))
title = title(content)
pageFile = open('wewantto.txt','w',encoding='utf-8')#以寫的方式打開pageCode.txt
for i in title:
    pageFile.write(i)#寫入
    pageFile.write('\n')
pageFile.close()#開了記得關
# 實作了爬的單個頁面的title和img的url并存入文本


           

調整的地方在網址和content函數中str和str1,契合網站代碼就行;加上了寫到記事本的操作~

好的!實作了爬取

初學Python爬蟲:爬取B站某個詳情頁的所有标題

然後就是停不下來的手癢了:畢竟還是要爬一些大家熟悉的網站最好嘛

什麼?你們說淘寶?我看看。。。

要登陸驗證,我不玩了,太高深啦!

最後選擇了B站,兩個原因:

1、不需要登陸,爬資料也很友善!

2、翻頁的時候網址變化很有規律!(在最後[&page=頁數]的變化)

3、最多隻顯示50頁,循環友善做!

在其中遇到了一個瓶頸,就是出現了 ‘str’ object is not callable的報錯,試驗了很久,發現這個函數隻能被調用一次!我佛了,求大佬解答(現在沒解決)

是以就是:我不管我不管,我要實作它!

解決方法:拆函數,具體代碼如下:

import urllib.request
import xlwt

#實戰爬取B站某頁資訊,v1.0

#初始化并建立一個工作簿
book = xlwt.Workbook()
#建立一個名為sheetname的表單
sheet = book.add_sheet('結果')

str0 = 'video-contain clearfix'
str1 = '</ul>'

for urlll in range(1,11):
    url0="https://search.bilibili.com/all?keyword=%E9%BE%99%E7%8E%8B%E7%9A%84%E5%B7%A5%E4%BD%9C%EF%BC%81&from_source=banner_search&spm_id_from=333.334.b_62616e6e65725f6c696e6b.1&page="+str(urlll)
    page=urllib.request.urlopen(url0)
    getHtml = page.read().decode("utf-8")
    content = getHtml.partition(str0)[2]
    content = content.partition(str1)[0]
    title_list = []
    for m in content:
        try:
            num1 = content.index('target="_blank" title=', 0) + 23
            num2 = content.index('" class', num1)
            title_list.append(content[num1:num2])
            content=content[num2:]
        except:
            break
    kkk=20*urlll-20
    for i in title_list:
        sheet.write(kkk, 0, i)
        kkk=kkk+1



#将工作簿以bookname命名并儲存
book.save('wewantto.xls')

           

注意一下要寫在Excel第一格的話,行列數應該從0開始。

這裡簡單地做了十頁的結果,看起來是不錯的。

(我試驗的詳情頁?啊最近看的一部番,随便用着)

初學Python爬蟲:爬取B站某個詳情頁的所有标題

目前暫時這樣子~