国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python晉江文學(xué)城數(shù)據(jù)分析(一)——爬蟲(chóng)(BeautifulSoup正則)

這篇具有很好參考價(jià)值的文章主要介紹了python晉江文學(xué)城數(shù)據(jù)分析(一)——爬蟲(chóng)(BeautifulSoup正則)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

0引言

學(xué)爬蟲(chóng),拿平??葱≌f(shuō)的綠色網(wǎng)站下手。

爬取的數(shù)據(jù)主要分為兩部分,收藏榜的小說(shuō)信息和小說(shuō)詳情頁(yè)的部分?jǐn)?shù)據(jù)。

1url解析

1.1收藏榜url

????????通過(guò)點(diǎn)擊榜單上側(cè)選項(xiàng)(其實(shí)也可以用拼音猜一猜),觀察url變化,尋找規(guī)律。如fw指代范圍,fbsj指代發(fā)表時(shí)間,ycx指代原創(chuàng)性,以此類推??梢酝ㄟ^(guò)改變其后的數(shù)字,來(lái)改變榜單范圍。而最重要的翻頁(yè)就通過(guò)改變page=后的頁(yè)碼。

? ? ? ? 我沒(méi)什么要先定的范圍,就只更改page。

2.1小說(shuō)詳情頁(yè)url

? ? ? ? 隨意點(diǎn)擊任意小說(shuō)詳情頁(yè),可以看到主要區(qū)別就在于最后novelid的一串?dāng)?shù)字,看起來(lái)沒(méi)有什么規(guī)律的數(shù)字。

? ? ? ? 但是通過(guò)后面的頁(yè)面分析,可以看到小說(shuō)詳情頁(yè)的url其實(shí)就包含在html中,只要記錄下之后再轉(zhuǎn)接即可。

2頁(yè)面元素解析

2.1收藏榜

python晉江文學(xué)城數(shù)據(jù)分析(一)——爬蟲(chóng)(BeautifulSoup正則)

?????????鼠標(biāo)右鍵查看審查元素,觀察。

python晉江文學(xué)城數(shù)據(jù)分析(一)——爬蟲(chóng)(BeautifulSoup正則)

? ? ? ? 可以看到,整個(gè)收藏榜信息均在一個(gè)table之內(nèi),一行是一個(gè)tr,每格是一個(gè)td。

<tr>
<td align="left">
<a href="oneauthor.php?authorid=966799" target="_blank">木蘇里</a>
</td>
<td align="left">
<a href="onebook.php?novelid=3419133" target="_blank" title="簡(jiǎn)介:并肩炸考場(chǎng)
標(biāo)簽:強(qiáng)強(qiáng) 無(wú)限流 相愛(ài)相殺 未來(lái)架空">全球高考</a>
</td>
<td align="center">
         原創(chuàng)-純愛(ài)-近代現(xiàn)代-劇情                                </td>
<td align="center">
           輕松                                </td>
<td align="center">
        <font color="red">完結(jié)</font>                                </td>
<td align="right">589514</td>
<td align="right">35908325376</td>
<td align="center">2018-10-10 20:03:00</td>
</tr>

????????以第一部作品為例,按順序,可以爬取到作者(木蘇里)、作品詳情頁(yè)鏈接(oneauthor.php?authorid=966799)、簡(jiǎn)介+標(biāo)簽(簡(jiǎn)介:并肩炸考場(chǎng)
標(biāo)簽:強(qiáng)強(qiáng) 無(wú)限流 相愛(ài)相殺 未來(lái)架空)、作品(全球高考)、類型(原創(chuàng)-純愛(ài)-近代現(xiàn)代-劇情)、風(fēng)格(輕松)、進(jìn)度(完結(jié))、字?jǐn)?shù)(589514)、作品積分(35908325376)、發(fā)表時(shí)間(2018/10/10 20:03:00)。

? ? ? ? 整個(gè)表格都比較有規(guī)律,先f(wàn)indall tr,再根據(jù)html寫出對(duì)應(yīng)的正則compile。

2.2小說(shuō)詳情頁(yè)

? ? ? ? 詳情頁(yè)主要準(zhǔn)備爬取三個(gè)地方:文案、文章基本信息、章節(jié)表格結(jié)尾數(shù)據(jù)

????????1)文案

python晉江文學(xué)城數(shù)據(jù)分析(一)——爬蟲(chóng)(BeautifulSoup正則)

? ? ? ? 2)作品視角、是否出版、簽約狀態(tài)

python晉江文學(xué)城數(shù)據(jù)分析(一)——爬蟲(chóng)(BeautifulSoup正則)

? ? ? ? ?3)總書(shū)評(píng)數(shù)、當(dāng)前被收藏?cái)?shù)、營(yíng)養(yǎng)液數(shù)

python晉江文學(xué)城數(shù)據(jù)分析(一)——爬蟲(chóng)(BeautifulSoup正則)

? ? ? ? ?同樣是查看審查元素,寫出正則表達(dá)式,但在這里遇到了不少問(wèn)題:

? ? ? ? 1)審查元素與源代碼有差別

? ? ? ? 部分?jǐn)?shù)據(jù),如非v章節(jié)章均點(diǎn)擊數(shù),審查元素有,但是源代碼里是空白:

python晉江文學(xué)城數(shù)據(jù)分析(一)——爬蟲(chóng)(BeautifulSoup正則)

python晉江文學(xué)城數(shù)據(jù)分析(一)——爬蟲(chóng)(BeautifulSoup正則)

? ? ? ? ?這是個(gè)動(dòng)態(tài)元素,后來(lái)找到了解決辦法,但是要再次跳轉(zhuǎn)頁(yè)碼過(guò)于麻煩,所以決定放棄這個(gè)數(shù)據(jù)。

? ? ? ? 2)區(qū)域html差別大

? ? ? ? 爬取的三個(gè)地方,不像收藏榜是在一個(gè)table里,很難findall先鎖定一個(gè)大區(qū)域,嘗試之后,東拼西湊,文案和書(shū)評(píng)收藏?cái)?shù)用compile,文章基本信息里,先f(wàn)indall了ul。

? ? ? ? 3)是否出版扒不下來(lái)

python晉江文學(xué)城數(shù)據(jù)分析(一)——爬蟲(chóng)(BeautifulSoup正則)

? ? ? ? ?原本想把title里的文字給扒下來(lái),但是無(wú)論如何compile都是空白,最后草率地寫了個(gè)if else簡(jiǎn)單判斷,手動(dòng)append上是否出版的信息。

3cookie

? ? ? ? 晉江不登錄的話,只讓爬取前十頁(yè)的數(shù)據(jù),十頁(yè)以后會(huì)有登錄提示,爬蟲(chóng)也自動(dòng)斷了,上網(wǎng)找到了解決方法,登錄晉江賬號(hào)后,查看審查元素,并刷新頁(yè)面,找到如下所示:?

python晉江文學(xué)城數(shù)據(jù)分析(一)——爬蟲(chóng)(BeautifulSoup正則)

? ? ? ? ?將cookie復(fù)制,加到爬蟲(chóng)的請(qǐng)求頭中。

4代碼

import requests
from bs4 import BeautifulSoup
import time
import re
import xlwt

t1 = time.time()

def main(savepath):
    count=0
    for page in range(1,501):
        url = get_url(page)
        headers = {
            'cookie': '你的cookie'}
        html = requests.get(url, headers=headers)
        html.encoding = html.apparent_encoding
        try:
            datalist = getData(html.content)
        except:
            print("爬取失?。?, page)
            continue
        if len(datalist) == 0:
            break
        saveData(savepath,datalist,count)
        count+=len(datalist)
        print(page)
        print(count)
        #time.sleep(3)


def get_url(page):
    url = f"https://www.jjwxc.net/bookbase.php?fw0=0&fbsj0=0&ycx0=0&xx0=0&mainview0=0&sd0=0&lx0=0&fg0=0&bq=-1&sortType=4&isfinish=0&collectiontypes=ors&page={page}"
    return url

#提取收藏榜數(shù)據(jù)的正則表達(dá)式
findAuthor = re.compile(r'">(.*?)</a>',re.U)
findName = re.compile(r'">(.*?)</a>',re.U)
findBookLink = re.compile(r'<a href="(.*?)"')
findTitle = re.compile(r"<a.*?href=.*?<\/a>", re.I|re.S|re.M)
findType = re.compile(r'<td align="center">(.*?)</td>', re.S|re.M)
findStyle = re.compile(r'<td align="center">(.*?)</td>', re.S|re.M)
findPro = re.compile(r'<td align="center">(.*?)</td>', re.S|re.M)
findSize = re.compile(r'<td align="right">(\d+)</td>')
findPoint = re.compile(r'<td align="right">(\d+)</td>')
findTime = re.compile(r'<td align="center">(.*?)</td>')

def getData(document):
    datalist = []
    soup = BeautifulSoup(document, "html.parser")
    i = 0
    for item in soup.findAll('tr'):
        data = [] # 保存一本書(shū)的所有信息
        item = str(item)         
        Author = re.findall(findAuthor, item)# 提取作者名     
        Name = re.findall(findName, item)# 提取文名            
        BookLink = re.findall(findBookLink, item)# 提取文章鏈接           
        Title = re.findall(findTitle, item)# 提取標(biāo)簽            
        Type = re.findall(findType, item)# 提取類型            
        Style = re.findall(findStyle, item)# 提取風(fēng)格 
        Pro = re.findall(findPro, item)# 提取進(jìn)度
        Size = re.findall(findSize, item)# 提取字?jǐn)?shù)
        Point = re.findall(findPoint, item)# 提取積分
        Time = re.findall(findTime, item)# 提取發(fā)表時(shí)間

        if i:
            data.append(Author[0])
            data.append(Name[1])
            BookLink[1]='http://www.jjwxc.net/' + BookLink[1]
            data.append(BookLink[1])
            Title[1]=re.findall(r'title="(.*?)"', Title[1], re.S|re.M)
            data.append(Title[1])
            data.append(Type[0].strip())
            data.append(Style[1].strip())
            if '</font>' in Pro[2]:
                Pro[2]=re.findall(r'>(.*?)</font>', Pro[2])
                data.append(Pro[2])
            else:
                data.append(Pro[2].strip())
            data.append(int(Size[0]))
            data.append(int(Point[1]))
            data.append(Time[0])

            #進(jìn)入小說(shuō)詳情頁(yè),爬取相關(guān)數(shù)據(jù)
            try:
                detail(BookLink[1],data)
            except:
                print("爬取失?。?, BookLink[1])
                continue

            datalist.append(data)
        i = 1
    return datalist

def getURL(url):
    headers = {
    'User-Agent': 'Mozilla/5.0 (MSIE 10.0; Windows NT 6.1; Trident/5.0)'
    }
    response = requests.get(url,headers = headers)
    response.encoding = 'gbk'
    time.sleep(0.2)
    if response.status_code == 200:
        return response.text
    return None

def detail(url,data):
    html = getURL(url)
    soup = BeautifulSoup(html, "html.parser")
    #爬取書(shū)評(píng)、收藏、營(yíng)養(yǎng)液數(shù)
    comment = re.compile('<tr>.*?<td.*?>.*?<div align="center">.*?<span.*?>(.*?)</span>.*?<span.*?>(.*?)</span>.*?<span.*?>(.*?)</span>.*?<span.*?>(.*?)</span>.*?',re.S)
    items = re.findall(comment,html)
    for j in items:
        data.append(j[1])#書(shū)評(píng)數(shù)
        data.append(j[2])#當(dāng)前被收藏?cái)?shù)
        data.append(j[3])#營(yíng)養(yǎng)液數(shù)

    #爬取文案
    copywriting = re.compile('<tr>.*?<div id="novelintro" itemprop="description">(.*?)</div>',re.S)
    items = re.findall(copywriting,html)
    #value = items[0].replace('<br>', '').replace(' ', '')
    pattern = re.compile(r'<[^>]+>',re.S)
    value = pattern.sub('', items[0])
    data.append(value)

    # 爬取作品視角、出版、簽約狀態(tài)
    result_list = soup.find_all('ul',attrs={'name':'printright'})
    for results in result_list:
        result=str(results)
        infor = re.compile('</span>(.*?)</li>',re.S|re.M)
        items = re.findall(infor,result)
        data.append(items[2].strip())#作品視角
        if 'img' in items[7]:#是否出版
            data.append("已出版")
        else:
            data.append("尚未出版")
        items[9]=re.findall(r'>(.*?)</font>', items[9])#是否簽約
        data.append(items[9][0])

workbook = xlwt.Workbook(encoding='utf-8',style_compression=0)
worksheet = workbook.add_sheet('晉江', cell_overwrite_ok=True)
col = ("作者","作品","鏈接","標(biāo)簽","類型","風(fēng)格","進(jìn)度","字?jǐn)?shù)","作品積分","發(fā)表時(shí)間","總書(shū)評(píng)數(shù)","當(dāng)前被收藏?cái)?shù)","營(yíng)養(yǎng)液數(shù)","文案","視角","出版狀態(tài)","簽約狀態(tài)")
for i in range(0,17):
    worksheet.write(0,i,col[i])

# 3.保存數(shù)據(jù)
# 保存到文件中
def saveData(savepath,datalist,count):
    for i in range(0,len(datalist)):
        data = datalist[i]
        for j in range(0,len(data)):
            worksheet.write(count+i+1,j,data[j])
    workbook.save(savepath)

if __name__ == "__main__":
	main("你的存儲(chǔ)路徑")

print("耗時(shí):", time.time() - t1)

5結(jié)果

python晉江文學(xué)城數(shù)據(jù)分析(一)——爬蟲(chóng)(BeautifulSoup正則)

? ? ? ? 500頁(yè)每頁(yè)100本小說(shuō),最后爬取出來(lái)46953條數(shù)據(jù)。

6總結(jié)?

? ? ? ? 回憶性文章,其實(shí)過(guò)程中遇到過(guò)很多問(wèn)題和困難,但暫時(shí)只想起這些了。

????????待改善的地方:

????????1)爬取太慢,爬取250頁(yè)花費(fèi)近10個(gè)小時(shí),看網(wǎng)上有多進(jìn)程、多線程可以加快爬蟲(chóng)時(shí)間,之后有時(shí)間當(dāng)學(xué)習(xí)改進(jìn);

????????2)正則表達(dá)式不夠精確,部分詳情頁(yè)爬取出來(lái)不是目的數(shù)據(jù),因?yàn)殄e(cuò)誤的數(shù)據(jù)量不多,后續(xù)數(shù)據(jù)處理采取了直接刪除的辦法,之后可以在爬蟲(chóng)階段嘗試改進(jìn);

????????3)部分收藏榜頁(yè)整頁(yè)爬取失敗,部分詳情頁(yè)爬取失敗,失敗原因待查。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-474890.html

到了這里,關(guān)于python晉江文學(xué)城數(shù)據(jù)分析(一)——爬蟲(chóng)(BeautifulSoup正則)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 大數(shù)據(jù)爬蟲(chóng)分析基于Python+Django旅游大數(shù)據(jù)分析系統(tǒng)

    大數(shù)據(jù)爬蟲(chóng)分析基于Python+Django旅游大數(shù)據(jù)分析系統(tǒng)

    歡迎大家點(diǎn)贊、收藏、關(guān)注、評(píng)論啦 ,由于篇幅有限,只展示了部分核心代碼。 ?? 基于Python和Django的旅游大數(shù)據(jù)分析系統(tǒng)是一種使用Python編程語(yǔ)言和Django框架開(kāi)發(fā)的系統(tǒng),用于處理和分析旅游行業(yè)的大數(shù)據(jù),為旅游從業(yè)者和決策者提供有關(guān)旅游趨勢(shì)、客戶需求、市場(chǎng)競(jìng)爭(zhēng)

    2024年02月03日
    瀏覽(30)
  • 【Python爬蟲(chóng)與數(shù)據(jù)分析】基本數(shù)據(jù)結(jié)構(gòu)

    目錄 一、概述 二、特性 三、列表 四、字典 Python基本數(shù)據(jù)結(jié)構(gòu)有四種,分別是列表、元組、集合、字典 ,這是Python解釋器默認(rèn)的數(shù)據(jù)結(jié)構(gòu),可以直接使用,無(wú)需像C語(yǔ)言那樣需要手搓或像C++那樣需要聲明STL頭文件。 Python的數(shù)據(jù)結(jié)構(gòu)非常靈活,對(duì)數(shù)據(jù)類型沒(méi)有限制,即一個(gè)數(shù)

    2024年02月11日
    瀏覽(23)
  • 【Python爬蟲(chóng)與數(shù)據(jù)分析】進(jìn)階語(yǔ)法

    目錄 一、異常捕獲 二、迭代器 三、拆包、聚合、映射 四、filter() 函數(shù) 五、匿名函數(shù) 六、閉包 七、裝飾器 異常捕獲可增強(qiáng)程序的健壯性,即程序在遇到遇到異常的時(shí)候并不會(huì)做中斷處理,而是會(huì)將異常拋出,由程序員來(lái)分析異常和做異常處理。 迭代器通常用于數(shù)據(jù)結(jié)構(gòu)對(duì)

    2024年02月12日
    瀏覽(23)
  • Python爬蟲(chóng)數(shù)據(jù)分析的基本概念

    Python爬蟲(chóng)數(shù)據(jù)分析是一種利用Python編程語(yǔ)言和相關(guān)的庫(kù)來(lái)獲取互聯(lián)網(wǎng)上的數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行處理、分析和可視化的技術(shù)。Python爬蟲(chóng)數(shù)據(jù)分析技術(shù)在數(shù)據(jù)挖掘、商業(yè)智能、市場(chǎng)調(diào)研、輿情分析等領(lǐng)域都有廣泛的應(yīng)用。本文將介紹Python爬蟲(chóng)數(shù)據(jù)分析的基本概念、常用庫(kù)和實(shí)戰(zhàn)案

    2024年02月06日
    瀏覽(31)
  • 數(shù)據(jù)分析畢業(yè)設(shè)計(jì) 大數(shù)據(jù)招聘崗位數(shù)據(jù)分析與可視化 - 爬蟲(chóng) python

    數(shù)據(jù)分析畢業(yè)設(shè)計(jì) 大數(shù)據(jù)招聘崗位數(shù)據(jù)分析與可視化 - 爬蟲(chóng) python

    # 1 前言 ?? 這兩年開(kāi)始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過(guò)畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)

    2024年02月10日
    瀏覽(30)
  • 【Python爬蟲(chóng)與數(shù)據(jù)分析】面向?qū)ο笤O(shè)計(jì)

    目錄 一、類的構(gòu)建與繼承 二、多繼承 三、鉆石繼承 四、多態(tài) 五、鴨子類型 六、類的組合 七、類的私有屬性和方法 八、魔法方法 九、單例模式 類 的屬性包含 成員變量 和 成員函數(shù) (方法) 成員函數(shù) 又分為 靜態(tài)方法 、 魔法方法 、 普通成員方法 靜態(tài)方法可以直接被類

    2024年02月11日
    瀏覽(21)
  • 【Python爬蟲(chóng)與數(shù)據(jù)分析】進(jìn)程、線程、協(xié)程

    【Python爬蟲(chóng)與數(shù)據(jù)分析】進(jìn)程、線程、協(xié)程

    目錄 一、概述 二、進(jìn)程的創(chuàng)建 三、線程的創(chuàng)建 四、協(xié)程的創(chuàng)建 五、全局變量的共享問(wèn)題 六、消息隊(duì)列與互斥鎖 七、池化技術(shù) 進(jìn)程是系統(tǒng)分配資源的基本單位,線程是CPU調(diào)度的基本單位。 一個(gè)進(jìn)程可包含多個(gè)線程,一個(gè)線程可包含多個(gè)協(xié)程,協(xié)程就是最小的任務(wù)執(zhí)行單位

    2024年02月13日
    瀏覽(27)
  • 【Python爬蟲(chóng)與數(shù)據(jù)分析】初階語(yǔ)法

    目錄 一、數(shù)據(jù)類型 二、輸入輸出 三、算術(shù)運(yùn)算 四、邏輯與條件判斷 五、循環(huán)控制 六、函數(shù) Python的數(shù)據(jù)類型分為 常量 、 數(shù)值變量 、 字符串變量 、 布爾變量 (True、False) 常量可以直接參與運(yùn)算與賦值, 變量無(wú)需聲明可直接定義 整型與浮點(diǎn)型數(shù)值可以直接相互運(yùn)算 ,整

    2024年02月11日
    瀏覽(17)
  • 【Python數(shù)據(jù)分析案例】——中國(guó)高票房電影分析(爬蟲(chóng)獲取數(shù)據(jù)及分析可視化全流程)

    【Python數(shù)據(jù)分析案例】——中國(guó)高票房電影分析(爬蟲(chóng)獲取數(shù)據(jù)及分析可視化全流程)

    案例背景 最近總看到《消失的她》票房多少多少,《孤注一擲》票房又破了多少多少… 于是我就想自己爬蟲(chóng)一下獲取中國(guó)高票房的電影數(shù)據(jù),然后分析一下。 數(shù)據(jù)來(lái)源于淘票票:影片總票房排行榜 (maoyan.com) 爬它就行。 代碼實(shí)現(xiàn) 首先爬蟲(chóng)獲取數(shù)據(jù): 數(shù)據(jù)獲取 導(dǎo)入包 傳入網(wǎng)

    2024年01月20日
    瀏覽(126)
  • 【Python爬蟲(chóng)與數(shù)據(jù)分析】爬蟲(chóng)常用標(biāo)準(zhǔn)庫(kù)(時(shí)間、隨機(jī)數(shù))

    【Python爬蟲(chóng)與數(shù)據(jù)分析】爬蟲(chóng)常用標(biāo)準(zhǔn)庫(kù)(時(shí)間、隨機(jī)數(shù))

    目錄 一、模塊化概述 二、time庫(kù) 1. 時(shí)間獲取 2. 時(shí)間格式化 3. 程序計(jì)時(shí) 三、datetime庫(kù) 1. datetime.datetime類 2. datetime.timedelta類 四、random庫(kù) 1. 基本隨機(jī)函數(shù) 2. 擴(kuò)展隨機(jī)函數(shù) 3. 隨機(jī)時(shí)間的生成 Python程序由模塊組成,一個(gè)模塊對(duì)應(yīng)一個(gè) .py 源文件。 模塊分為 標(biāo)準(zhǔn)庫(kù)模塊 和 自定義模

    2024年02月15日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包