「Spider」爬取A壇資源鏈接

嗯……之前用Scrapy寫過(guò)一個(gè),并且成功爬了下來(lái),奈何效率低下而且配置蛋疼,今天在網(wǎng)易云課堂看到不錯(cuò)的教程,用他現(xiàn)成的代碼改了下,竟也運(yùn)行成功,而且效率高了不少。在此Mark下,方便以后參考。

因?yàn)檎搲拗扑阉鲿r(shí)間在一年以內(nèi),為了方便本地查找資源,因此目標(biāo)為保存所有的專輯及鏈接到一個(gè)HTML中。

思路很簡(jiǎn)單,首先打開網(wǎng)頁(yè),篩選需要抓取的數(shù)據(jù)(鏈接、標(biāo)題),保存瀏覽器的Cookies及User-Agent到一個(gè)Dict里,用requests庫(kù)加上之前的User-Agent下載網(wǎng)頁(yè),使用BeautifunSoup解析后,調(diào)試CSS Selector到能夠準(zhǔn)確指向所需信息,然后將專輯及對(duì)應(yīng)的鏈接分別放置在一個(gè)Dict里,處理輸出即可。

from bs4 import BeautifulSoup
import requests
import time

#定義需要爬取的頁(yè)面及headers
url = 'https://hostname/bbs/thread.php?fid=fid&page=1'
urls = ['https://hostname/bbs/thread.php?fid=fid&page={}'.format(str(i)) for i in range(start,end,step)]
headers = {
    'User-Agent':'',
    'Cookie':''
}

#爬取專輯信息
def getAlbumInfo(url,data=None):
    wb_data = requests.get(url,headers=headers)
    time.sleep(4)
    soup = BeautifulSoup(wb_data.text,'lxml')
    titles    = soup.select('tr.t_one > td > h3 > a')
    links     = soup.select('tr.t_one > td > h3 > a')
    data = []
    if data == []:
        for titles,links in zip(titles,links):
            datas = {
                'title'  :titles.get_text(),
                'link'  :links.get('href'),
                }
            data.append(datas)
    print(data)
    return data

#遍歷爬取結(jié)果及輸出為HTML鏈接
def dataProcessAndWriteToFile(result):
    for links in result:
        url = '<a '+'href=https://hostname/bbs/'+str(links['link'])+'>'+str(links['title'])+'</a>'+'</br>'
        print(url)
        f = open('output.html','a',encoding='utf-8')
        f.write(url)
        f.close()

#執(zhí)行
for url in urls:
    current = getAlbumInfo(url)
    dataProcessAndWriteToFile(current)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容