初學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,契合網站代碼就行;加上了寫到記事本的操作~
好的!實作了爬取
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB5ENnRkTwkleNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zROBlLwUzN3ETN1cTMzAzMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
然後就是停不下來的手癢了:畢竟還是要爬一些大家熟悉的網站最好嘛
什麼?你們說淘寶?我看看。。。
要登陸驗證,我不玩了,太高深啦!
最後選擇了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開始。
這裡簡單地做了十頁的結果,看起來是不錯的。
(我試驗的詳情頁?啊最近看的一部番,随便用着)
目前暫時這樣子~