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

基于爬蟲和Kettle的書籍信息采集與預處理

這篇具有很好參考價值的文章主要介紹了基于爬蟲和Kettle的書籍信息采集與預處理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一:爬蟲

1、爬取的目標

將讀書網(wǎng)上的書籍的基本信息,比如:封面、書名、作者、出版社、價格、出版時間、內(nèi)容簡介、作者簡介、書籍目錄、ISBN和標簽爬取出來,并將爬取的結(jié)果放入數(shù)據(jù)庫中,方便存儲。

2、網(wǎng)站結(jié)構(gòu)

???

基于爬蟲和Kettle的書籍信息采集與預處理,python,爬蟲,python

圖1讀書網(wǎng)書籍類別詳情

此次實驗爬取讀書網(wǎng)頁面中文學、小說、傳記、青春文學、藝術(shù)、散文隨筆、勵志、人文社科、經(jīng)濟管理、勵志十大類書籍。

每一類書籍包括書名、價格、作者、出版社、ISDN、出版時間、封面以及書籍簡介、作者簡介、書目錄和書籍所屬類別。頁面具體情況如圖2所示。

基于爬蟲和Kettle的書籍信息采集與預處理,python,爬蟲,python

圖2讀書網(wǎng)書籍屬性設計詳情

3、爬蟲技術(shù)方案

1)、所用技術(shù):

?????????網(wǎng)站解析的使用的是Xpath、數(shù)據(jù)庫存儲使用的是pymysql。

2)、爬取步驟:

????(1)、分析目標網(wǎng)站:了解頁面結(jié)構(gòu);

(2)、獲取頁面內(nèi)容:使用python中的requests庫來獲取頁面內(nèi)容;

(3)、定位頁面:使用Xpath定位我們所需要的數(shù)據(jù)的位置;

(4)、連接數(shù)據(jù)庫:創(chuàng)建數(shù)據(jù)連接,放入自己數(shù)據(jù)庫的端口、用戶和密碼等數(shù)據(jù),使得連接上自己的數(shù)據(jù)庫,將爬取好的數(shù)據(jù)返給數(shù)據(jù)庫中,方便存儲;

(5)、關(guān)閉連接:關(guān)閉數(shù)據(jù)庫連接。

4、爬取過程:

???

1)、常量定義

????基于爬蟲和Kettle的書籍信息采集與預處理,python,爬蟲,python

此處定義了網(wǎng)頁后綴END=‘.html’用于進行網(wǎng)頁拼接。

Start_Page = 1 定義爬取起始頁碼,end_Page = 10 定義爬取結(jié)束頁碼。

Base_url 用于設置爬取網(wǎng)頁的基礎網(wǎng)站,進行后續(xù)網(wǎng)頁拼接。

Book_type={},該字典設置爬取書籍類別。

Header={},該字典進行請求頭設置。

2)、設置游標,連接數(shù)據(jù)庫,再使用for循環(huán),確保書籍能夠循環(huán)爬取,最后將爬取完畢的數(shù)據(jù)放入數(shù)據(jù)庫中,最后關(guān)閉數(shù)據(jù)庫的連接。

基于爬蟲和Kettle的書籍信息采集與預處理,python,爬蟲,python

??

???3)、一級鏈接爬取,接收參數(shù)基本網(wǎng)頁地址、書籍類型、網(wǎng)頁頁數(shù)后,再使用requests庫中r.get(url=url,headers=header)發(fā)送請求,使用response接收請求數(shù)據(jù)。

???基于爬蟲和Kettle的書籍信息采集與預處理,python,爬蟲,python

4)、二級鏈接爬取,在數(shù)據(jù)獲取步驟,進行更細致的xpath語句書寫。

使用try-except語句提高程序健壯性,返回一個書籍信息字典。

??????基于爬蟲和Kettle的書籍信息采集與預處理,python,爬蟲,python

??????5)、保存數(shù)據(jù),創(chuàng)建游標,編寫sql語言,之后執(zhí)行sql語言,執(zhí)行成功就插入所給的表,如果執(zhí)行失敗則輸出插入失敗。

??????基于爬蟲和Kettle的書籍信息采集與預處理,python,爬蟲,python

5、爬蟲結(jié)果

基于爬蟲和Kettle的書籍信息采集與預處理,python,爬蟲,python

基于爬蟲和Kettle的書籍信息采集與預處理,python,爬蟲,python

二:預處理

  1. 刪除列

1)、新建轉(zhuǎn)換,之后使用表輸入,將MySQL文件中的表輸入kettle。需要連接數(shù)據(jù)庫的類型是MySQL,主機名稱是localhost、用戶是root、密碼是root、端口號是3306。

????基于爬蟲和Kettle的書籍信息采集與預處理,python,爬蟲,python

之后進行字段獲取。

基于爬蟲和Kettle的書籍信息采集與預處理,python,爬蟲,python

2)、選擇轉(zhuǎn)換中的字段選擇進行列刪除,將dictroy這個列進行刪除。

基于爬蟲和Kettle的書籍信息采集與預處理,python,爬蟲,python

2、選擇轉(zhuǎn)換中的增加常量,增加remainder這一列,查詢書籍賣出剩余的情況。

????基于爬蟲和Kettle的書籍信息采集與預處理,python,爬蟲,python

  1. 、最后選擇文本文件輸出,將處理好的數(shù)據(jù)輸出,輸出的格式是csv文件,分割符用逗號隔開,編碼用UTF-8J進行轉(zhuǎn)碼,防止輸出文件中有亂碼。文本文件命名為姓名_處理完成_csv。

4、預處理完全處理全流程

基于爬蟲和Kettle的書籍信息采集與預處理,python,爬蟲,python

三、爬蟲源代碼

import re
import requests
from lxml import etree
import pymysql
import datetime
"""
爬取一個網(wǎng)站
1.獲得數(shù)據(jù)不小于一千條
2.每條數(shù)據(jù)屬性不小于10
"""

END = '.html'
start_Page = 1
end_Page = 10
base_url = 'https://www.dushu.com'
# 以字典形式保存每一類對應的網(wǎng)頁數(shù)字
book_type = {"文學": 1077, "小說": 1078, "傳記": 1081, "青春文學": 1079,
     "藝術(shù)": 1082, "散文隨筆": 1163, "鑒賞": 1222, "人文社科": 1003,
     "經(jīng)濟管理": 1004, "勵志": 1094
}

header = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

def get_one_bookInfo_link(base_url, _type, page):
    # url 控制爬取的書籍類型、網(wǎng)頁頁數(shù)
    url = base_url+'/book/'+str(_type)+'_'+str(page)+END
    # print(url)
    response = requests.get(url=url, headers=header)
    if response.status_code == 200:
        htmlTEXT = response.content.decode(response.apparent_encoding)
        html = etree.HTML(htmlTEXT)
        bookLinke_List = html.xpath('//div[@class="container margin-top"]//div[@class="bookslist"]/ul/li/div[@class="book-info"]/h3/a/@href')
        return bookLinke_List
    else:
        print("請求失敗")


def get_oneBook_info(bookLinke):
    url = base_url + bookLinke
    content = requests.get(url=url, headers=header)
    if content.status_code == 200:
        info = etree.HTML(content.content.decode(content.apparent_encoding))
        # 獲取書籍詳細信息,十個
        try:
            img = info.xpath('//div[@class="bookdetails-left"]/div[@class="book-pic"]//img/@src')[0]  # 封面
            title = info.xpath('//div[@class="bookdetails-left"]/div[@class="book-pic"]//img/@alt')[0]  # 書名
            author = info.xpath('//div[@id="ctl00_c1_bookleft"]/table//tr[1]//td[2]/text()')[0]  # 作者
            publish = info.xpath('//div[@id="ctl00_c1_bookleft"]/table//tr[2]//td[2]/text()')[0]  # 出版社
            temp_price = info.xpath('//div[@id="ctl00_c1_bookleft"]/p/span/text()')[0]  # 價格
            price = temp_price.split('¥')[1]
            time = info.xpath('//div[@class="bookdetails-left"]/div[@class="book-details"]/table//tr[1]/td[@class="rt"][2]/text()')[0]  # 出版時間
            cont = info.xpath('//div[@class="container margin-top"]//div[contains(@class, "book-summary")][1]/div/div/text()')[0]   # 內(nèi)容簡介
            blurb = info.xpath('//div[@class="container margin-top"]//div[contains(@class, "book-summary")][2]/div/div/text()')[0]  # 作者簡介
            directory = info.xpath('//div[@class="container margin-top"]//div[contains(@class, "book-summary")][3]/div/div/text()')[0]  # 書籍目錄
            isbn = info.xpath('//div[@class="bookdetails-left"]/div[@class="book-details"]/table//tr[1]/td[@class="rt"][1]/text()')[0]   # ISBN
            label = info.xpath('//div[@id="ctl00_c1_bookleft"]/table//tr[4]//td[2]/text()')[0]  # 標簽
            # 使用字典保存一本書籍的信息
            book_info = {
                "img": img,
                "title": title,
                "author": author,
                "publish": publish,
                "price": price,
                "time": time,
                "cont": cont,
                "blurb": blurb,
                "directory": directory,
                "isbn": isbn,
                "label": label
            }
            return book_info
        except Exception as e:
            print("爬取時單本書籍獲取出現(xiàn)錯誤:", e, "\n發(fā)生錯誤地址為:"+url)
            err_info = {
                "img": 'https://a.dushu.com/img/n200.png',
                "title": 'titleEro',
                "author": 'authorEro',
                "publish": 'publishEro',
                "price": '00.00',
                "time": '2001-01-01',
                "cont": 'contEro',
                "blurb": 'blurbEro',
                "directory": 'directoryEro',
                "isbn": 'isbnEro',
                "label": 'labelEro'
            }
            return err_info
    else:
        print("請求失敗")


def set_BookInfo_ToMySql(book_info, db):
    # print(book_info.values())
    cursor = db.cursor()
    # sql語句
    sql = "INSERT INTO book(img,title,author,publish,price,time,cont,blurb,directory,isbn,label) VALUES " \
          "('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')"\
          %(book_info["img"], book_info["title"], book_info["author"], book_info["publish"],
            book_info["price"], book_info["time"], book_info["cont"], book_info["blurb"],
            book_info["directory"], book_info["isbn"], book_info["label"])
    print(book_info.values())
    try:
        # 執(zhí)行sql語句
        if cursor.execute(sql):
            print('插入數(shù)據(jù)成功')
            # 提交到數(shù)據(jù)庫執(zhí)行
            db.commit()  # 持久化
    except Exception as e:
        # 如果發(fā)生錯誤則回滾
        print("插入失敗", e)
        db.rollback()


def main():
    #  用于存儲計算數(shù)據(jù)爬取數(shù)量
    count = 0
    # 連接數(shù)據(jù)庫
    db = pymysql.connect(host='localhost', user='root', password='root', port=3306, db='pachong')
    # 開啟爬取程序
    for type in book_type:  # 控制爬取書籍的類別
        for i in range(start_Page, end_Page+1):    # 控制每一類爬取的頁數(shù)
            # 每一個網(wǎng)頁的書籍的二級連接
            bookLinke_List = get_one_bookInfo_link(base_url=base_url, _type=book_type[type], page=i)
            if bookLinke_List:
                for link in bookLinke_List:
                    print(link)
                    info = get_oneBook_info(link)
                    info['label'] = type
                    # print(info)
                    set_BookInfo_ToMySql(book_info=info, db=db)
                    count += 1
            else:
                print("爬取內(nèi)容為空")
    # 數(shù)據(jù)插入完成后關(guān)閉數(shù)據(jù)庫
    if db:
        db.close()
        print("關(guān)閉數(shù)據(jù)庫成功,程序結(jié)束")
    else:
        print("數(shù)據(jù)加載成功,數(shù)據(jù)庫未關(guān)閉")
    return count


if __name__ == '__main__':
    print("Run...")
    # 獲取開始時間
    start_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    # db = pymysql.connect(host='localhost', user='root', password='root', port=3306, db='movie')
    # info = get_oneBook_info('/book/13981332/')
    # set_BookInfo_ToMySql(info, db=db)
    # db.close()
    print("已爬取書籍數(shù)量:", main())
    # 獲取結(jié)束時間
    end_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    print("程序結(jié)束{}\n運行開始時間:{}".format(end_time, start_time))

?文章來源地址http://www.zghlxwxcb.cn/news/detail-811688.html

到了這里,關(guān)于基于爬蟲和Kettle的書籍信息采集與預處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關(guān)文章

  • 【數(shù)據(jù)采集與預處理】流數(shù)據(jù)采集工具Flume

    【數(shù)據(jù)采集與預處理】流數(shù)據(jù)采集工具Flume

    目錄 一、Flume簡介 (一)Flume定義 (二)Flume作用 二、Flume組成架構(gòu) 三、Flume安裝配置 (一)下載Flume (二)解壓安裝包 (三)配置環(huán)境變量 (四)查看Flume版本信息 四、Flume的運行 (一)Telnet準備工作 (二)使用Avro數(shù)據(jù)源測試Flume (三)使用netcat數(shù)據(jù)源測試Flume 五、F

    2024年01月21日
    瀏覽(26)
  • 1.0數(shù)據(jù)采集與預處理概述

    1.0數(shù)據(jù)采集與預處理概述

    大數(shù)據(jù)的來源: 1.搜索引擎數(shù)據(jù) 2.電商交易數(shù)據(jù) 3.社交網(wǎng)絡數(shù)據(jù) 4.物聯(lián)網(wǎng)傳感器數(shù)據(jù) 5.網(wǎng)站日志數(shù)據(jù) 數(shù)據(jù)采集的概念: 數(shù)據(jù)采集的ETL 工具負責將分布的、異構(gòu)數(shù)據(jù)源中的不同種類,和結(jié)構(gòu)的數(shù)據(jù)如文本數(shù)據(jù)、關(guān)系數(shù)據(jù)以及圖片、視頻等非結(jié)構(gòu)化數(shù)據(jù)等抽取到臨時中間層后進

    2024年02月02日
    瀏覽(16)
  • 【數(shù)據(jù)采集與預處理】數(shù)據(jù)接入工具Kafka

    【數(shù)據(jù)采集與預處理】數(shù)據(jù)接入工具Kafka

    目錄 一、Kafka簡介 (一)消息隊列 (二)什么是Kafka 二、Kafka架構(gòu) 三、Kafka工作流程分析 (一)Kafka核心組成 (二)寫入流程 (三)Zookeeper 存儲結(jié)構(gòu) (四)Kafka 消費過程 四、Kafka準備工作 (一)Kafka安裝配置 (二)啟動Kafka (三)測試Kafka是否正常工作 五、編寫Spark Str

    2024年01月19日
    瀏覽(25)
  • 【數(shù)據(jù)采集與預處理】數(shù)據(jù)傳輸工具Sqoop

    【數(shù)據(jù)采集與預處理】數(shù)據(jù)傳輸工具Sqoop

    目錄 一、Sqoop簡介 二、Sqoop原理 三、Sqoop安裝配置 (一)下載Sqoop安裝包并解壓 (二)修改配置文件 (三)拷貝JDBC驅(qū)動 (四)驗證Sqoop (五)測試Sqoop是否能夠成功連接數(shù)據(jù)庫 四、導入數(shù)據(jù) (一)RDBMS到HDFS (二)RDBMS到HBase (三)RDBMS到Hive 五、導出數(shù)據(jù) HDFS/Hive到RDBMS 六、

    2024年01月21日
    瀏覽(25)
  • 7.4 電子信息系統(tǒng)預處理中所用放大電路

    7.4 電子信息系統(tǒng)預處理中所用放大電路

    在電子信息系統(tǒng)中,通過傳感器或其它途徑所采集的信號往往很小,不能直接進行運算、濾波等處理,必須進行放大。 集成儀表放大器,也稱為精密放大器,用于弱信號放大。 1、儀表放大器的特點 在測量系統(tǒng)中,通常被測物理量均通過傳感器轉(zhuǎn)換為電信號,然后進行放大。

    2024年02月03日
    瀏覽(13)
  • YOLOv5訓練自己的數(shù)據(jù)集(含數(shù)據(jù)采集、數(shù)據(jù)標注、數(shù)據(jù)預處理、借助colab訓練)

    YOLOv5訓練自己的數(shù)據(jù)集(含數(shù)據(jù)采集、數(shù)據(jù)標注、數(shù)據(jù)預處理、借助colab訓練)

    YOLOv5 github:GitHub - ultralytics/yolov5: YOLOv5 ?? in PyTorch ONNX CoreML TFLite 先從github下載源碼到本地,用pycharm打開工程 ? 本次采集數(shù)據(jù)采用的方式是錄取視頻,然后用python截取視頻幀當做圖片,這是處理代碼: ? 可以使用labelimg工具、make sense(Make Sense)在線標注,注意數(shù)據(jù)集需要與

    2024年02月05日
    瀏覽(97)
  • yolov2檢測網(wǎng)數(shù)據(jù)集獲取與預處理_采集健康和非健康貓狗數(shù)據(jù)

    阿里云天池數(shù)據(jù)集-cat-dog 因為開源數(shù)據(jù)庫中沒有非健康貓狗相關(guān)的,所以需要自己下載非健康貓狗數(shù)據(jù),并制作數(shù)據(jù)集。 下面是用于爬取非健康貓狗數(shù)據(jù)的爬蟲代碼: 使用圖片去重/相似圖片清理利器 軟件清除重復的圖片數(shù)據(jù)。 使用ffmpeg將救助視頻文件按照一秒截取一張

    2024年02月14日
    瀏覽(23)
  • 利用Matlab實現(xiàn)Abaqus有限元分析預處理器——從inp文件導入模型信息到自編Matlab有限元程序前處理

    大家好,我非常榮幸有這個機會和大家分享我在有限元分析方面的一些經(jīng)驗。我希望我的這篇文章能夠幫助你在有限元分析領域獲得更多的知識,提升你的技能。這篇文章主要介紹了如何使用Matlab實現(xiàn)一個有限元分析的預處理器,這個預處理器能夠從Abaqus的 *.inp 文件中導入模

    2024年02月10日
    瀏覽(24)
  • 如何基于香橙派AIpro對視頻/圖像數(shù)據(jù)進行預處理

    本文分享自華為云社區(qū)《如何基于香橙派AIpro對視頻/圖像數(shù)據(jù)進行預處理》,作者: 昇騰CANN。 受網(wǎng)絡結(jié)構(gòu)和訓練方式等因素的影響,絕大多數(shù)神經(jīng)網(wǎng)絡模型對輸入數(shù)據(jù)都有格式上的限制。在計算機視覺領域,這個限制大多體現(xiàn)在圖像的尺寸、色域、歸一化參數(shù)等。如果源圖

    2024年04月22日
    瀏覽(34)
  • 深度學習中基于python的預處理和圖像擴增方法

    容易出現(xiàn)的報錯: 錯誤原因通常為保存的路徑不正確: 應改為: 即第一個參數(shù)應該寫到文件的名稱,而不能只寫到文件夾就停止。 灰度圖片和黑白圖片有些相似,但并不完全相同。 灰度圖片是指每個像素點的顏色由灰度值來表示,通常使用8位無符號整數(shù)(0-255)表示?;?/p>

    2024年02月08日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包