版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
大數(shù)據(jù)采集與預處理技術(shù)*
*項目二圖書信息數(shù)據(jù)采集與預處理序號軟件配置要求1scrapy最新版本2Scripy-redis最新版本一、項目目標:1、完成圖書信息數(shù)據(jù)分布式采集環(huán)境安裝配置;2、完成圖書信息數(shù)據(jù)采集程序設計和數(shù)據(jù)采集;3、完成圖書信息數(shù)據(jù)預處理清洗。4、完成圖書信息數(shù)據(jù)文本標注。二、環(huán)境要求:任務一分布式采集環(huán)境安裝配置一、任務目標1、掌握Scrapy和Scrapy-redis組件的安裝配置方法;2、了解Scrapy的工作機制和常見程序編寫;3、會使用Scrapy-redis編寫數(shù)據(jù)抓取程序;4、掌握常見的自然語言公開數(shù)據(jù)集獲取方法;5、編寫分布式爬蟲程序完成圖書信息數(shù)據(jù)采集。1、創(chuàng)建項目在命令行中使用scrapy命令創(chuàng)建一個doubanproject項目。命令如下所示:
scrapystartprojectdoubanproject切換到doubanproject項目,使用如下命令生成爬蟲doubanbook程序:
scrapygenspiderdoubanbook2、確定爬蟲字段本次爬取的圖書信息數(shù)據(jù)將為以后各類模型訓練使用,因此盡可能爬取圖書相關(guān)字段,例如“書名”、“縮略圖URL”、“作者”、“出版社”、“出版時間”、“評論數(shù)量”、“小簡介”、“子連接”、“評分”、“簡介”、“作者簡介”、“書的相關(guān)標簽”。3、定義item#在items.py文件中定義importscrapyclassDoubanprojectItem(scrapy.Item): #definethefieldsforyouritemherelike:#name=scrapy.Field() passclassBookItem(scrapy.Item): book_name=scrapy.Field() #書名 book_img_url=scrapy.Field() #書的縮略圖 book_author=scrapy.Field() #作者 book_publisher=scrapy.Field() #出版社 book_publish_time=scrapy.Field() #出版時間 book_grade=scrapy.Field() #評論數(shù)量 book_description=scrapy.Field() #小簡介 book_son_url=scrapy.Field() #子連接 book_score=scrapy.Field() #評分 book_introduction=scrapy.Field() #簡介 book_author_introduction=scrapy.Field() #作者簡介 book_labels=scrapy.Field() #書的相關(guān)標簽4、圖書字段xpath篩選書名: //li[@class="subject-item"]/div[2]/h2/a@title書的縮略圖: //li[@class="subject-item"]/div[1]/a/img@src作者: //li[@class="subject-item"]/div[2]/div[1]/text(),格式是“作者/出版社/出版時間”出版社: //li[@class="subject-item"]/div[2]/div[1]/text()出版時間: //li[@class="subject-item"]/div[2]/div[1]/text()評論數(shù)量: //li[@class="subject-item"]//span[@class="pl"]/text()小簡介: //li[@class="subject-item"]//p/text()子連接: //li[@class="subject-item"]//h2/a/@href評分: //*[@id="interest_sectl"]/div/div[2]/strong/text(),子連接頁面中,下同簡介: //*[@id="content"]/div/div[1]/div[3]/div[3]/div/div/p/text()作者簡介: //*[@id="content"]/div/div[1]/div[3]/div[2]/div/div/p/text()書的相關(guān)標簽://div[@id="db-tags-section"]/div/span/a/text()5、編寫pipeline#需要安裝mysql-connector-pythonimportmysql.connectorfrommysql.connectorimportError#定義itempipelineclassDoubanprojectPipeline:#定義數(shù)據(jù)庫連接def__init__(self):self.cursor=Noneself.connection=Nonedefopen_spider(self,spider):#設置據(jù)庫鏈接相關(guān)參數(shù)
try:self.connection=mysql.connector.connect(host=spider.settings.get('MYSQL_HOST'),database=spider.settings.get('MYSQL_DATABASE'),user=spider.settings.get('MYSQL_USER'),password=spider.settings.get('MYSQL_PASSWORD'))self.cursor=self.connection.cursor()#開啟數(shù)據(jù)庫游標 #創(chuàng)建數(shù)據(jù)庫表
#創(chuàng)建數(shù)據(jù)庫表
self.cursor.execute("""CREATETABLEIFNOTEXISTSitems(idINTAUTO_INCREMENTPRIMARYKEY,book_nameVARCHAR(255),book_img_urlVARCHAR(512),book_authorVARCHAR(255),book_publisherVARCHAR(255),book_publish_timeVARCHAR(255),book_gradeVARCHAR(255),book_descriptionVARCHAR(512),book_son_urlVARCHAR(255), book_scoreVARCHAR(255),book_introductionVARCHAR(512),book_author_introductionVARCHAR(512),book_labelsVARCHAR(255));""")exceptErrorase:spider.logger.error(f"ErrorconnectingtoMySQL:{e}")5、編寫pipeline
#關(guān)閉爬蟲時的相關(guān)操作
defclose_spider(self,spider):ifself.connection.is_connected():self.cursor.close()#關(guān)閉游標
self.connection.close()#關(guān)閉鏈接
#定義數(shù)據(jù)存儲方法
defprocess_item(self,item,spider):#執(zhí)行數(shù)據(jù)庫插入
self.cursor.execute("""INSERTINTOitems(book_name,book_img_url,book_author,book_publisher,book_publish_time,book_grade,book_description,book_son_url,book_score,book_introduction,book_author_introduction,book_labels)VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",(item['book_name'],item['book_img_url'],item['book_author'],item['book_publisher'],item['book_publish_time'],item['book_grade'],item['book_description'],item['book_son_url'],item['book_score'],item['book_introduction'],item['book_author_introduction'],item['book_labels']))#事務提交
mit()returnitem6、設置settings通常在settings文件中需要設置反爬機制,例如構(gòu)造爬蟲user-agent、并發(fā)配置、啟用cookies等,由于豆瓣讀書確實做了一定反爬機制,因此需要增加相應設置。由于需要啟用scrapy-redis和中間件,因此需要在settings.py文件中添加相應的配置。由于數(shù)據(jù)要保存到數(shù)據(jù)庫,因此還需要設置數(shù)據(jù)庫相關(guān)配置。示例如下:#工程名稱BOT_NAME="doubanproject"#默認生成配置SPIDER_MODULES=["doubanproject.spiders"]NEWSPIDER_MODULE="doubanproject.spiders"
#默認的Scrapy設置ROBOTSTXT_OBEY=True
#設置并發(fā)請求數(shù)10CONCURRENT_REQUESTS=10#設置每次請求間隔(秒)DOWNLOAD_DELAY=3#設置單個域名并發(fā)請求數(shù)量8CONCURRENT_REQUESTS_PER_DOMAIN=8#設置單個IP并發(fā)請求數(shù)量16CONCURRENT_REQUESTS_PER_IP=16
#啟用cookiesCOOKIES_ENABLED=False#構(gòu)造請求頭信息DEFAULT_REQUEST_HEADERS={'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/534.57.2(KHTML,likeGecko)Version/5.1.7Safari/534.57.2',"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language":"en",}#啟用spider中間件SPIDER_MIDDLEWARES={"doubanproject.middlewares.DoubanprojectSpiderMiddleware":543,}#啟用下載中間件DOWNLOADER_MIDDLEWARES={"doubanproject.middlewares.DoubanprojectDownloaderMiddleware":543,}#部分默認設置REQUEST_FINGERPRINTER_IMPLEMENTATION="2.7"TWISTED_REACTOR="ernet.asyncioreactor.AsyncioSelectorReactor"FEED_EXPORT_ENCODING="utf-8"#啟用隨機延遲間隔RANDOMIZE_DOWNLOAD_DELAY=True#構(gòu)造多個user_agent供切換使用USER_AGENT_LIST=['Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/87.0.4280.88Safari/537.36','Mozilla/5.0(Macintosh;IntelMacOSX10_15_7)AppleWebKit/605.1.15(KHTML,likeGecko)Version/14.0.3Safari/605.1.15']#啟用請求重試機制RETRY_ENABLED=True#請求重試最多3次RETRY_TIMES=3#下載超時時間(秒)DOWNLOAD_TIMEOUT=15#定義scrapy-redis設置SCHEDULER="scrapy_redis.scheduler.Scheduler"DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPDupeFilter"#啟用redis訪問隊列排隊功能SCHEDULER_PERSIST=True#定義鏈接Redis時的host和接口(可選配置)REDIS_HOST='localhost'REDIS_PORT=6379#設置Redis管道REDIS_ITEMS_KEY='doubanproject:items'#配置數(shù)據(jù)庫服務器地址MYSQL_HOST='localhost'#配置數(shù)據(jù)庫名MYSQL_DATABASE='doubandb'MYSQL_USER='root'MYSQL_PASSWORD='Sziit123'#配置管道,注意管道名稱ITEM_PIPELINES={"doubanproject.pipelines.DoubanprojectPipeline":300,}7、編寫爬蟲spiderimportscrapyfromdoubanproject.itemsimportBookItemfromscrapy_redis.spidersimportRedisSpiderclassDoubanbookSpider(RedisSpider):name="doubanbook"#通過redis_key輸入爬蟲的URL,需要在redis-cli設置douban_books:start_urlsredis_key='douban_books:start_urls'#初始化爬蟲數(shù)據(jù)結(jié)構(gòu)
item=BookItem()defparse(self,response):#選擇目標網(wǎng)頁的本書列表鏈接
books=response.xpath('//li[@class="subject-item"]')forbookinbooks:#提取書籍的詳細信息
self.item['book_name']=book.xpath('.//h2/a/@title').get()self.item['book_img_url']=book.xpath('.//div[@class="pic"]/a/img/@src').get()self.item['book_son_url']=book.xpath('.//h2/a/@href').get()book_info=book.xpath('.//div[@class="pub"]/text()').get().strip().split('/')self.item['book_publisher']=book_info[-3].strip()iflen(book_info)>2elseNoneself.item['book_publish_time']=book_info[-2].strip()iflen(book_info)>1elseNoneself.item['book_author']=book_info[0].strip()iflen(book_info)>0elseNoneself.item['book_grade']=book.xpath('.//span[@class="pl"]/text()').get()self.item['book_description']=book.xpath('.//p/text()').get()#進入每個書的詳情頁并解析額外的信息#進入每個書的詳情頁并解析額外的信息ifself.item['book_son_url']: #打開書籍的鏈接獲取詳細信息,需要把item實例傳給回調(diào)函數(shù)
yieldscrapy.Request(url=self.item['book_son_url'],dont_filter=True,callback=self.parse_details,meta={'item':self.item})#翻頁,爬取下一頁的書籍信息
next_page=response.css('div.paginatorspan.nexta::attr(href)').get()ifnext_page:next_page_url=response.urljoin("/"+next_page)yieldscrapy.Request(next_page_url,callback=self.parse)defparse_details(self,response):#提取書籍詳情頁的額外信息
self.item=response.meta['item']book_score=response.xpath('//*[@id="interest_sectl"]/div/div[2]/strong/text()').get()#提取作者簡介和書籍簡介
book_author_introduction=response.xpath('//*[@id="content"]/div/div[1]/div[3]/div[2]/div/div/p/text()').getall()ifresponseisnotNoneelseNonebook_introduction=response.xpath('//*[@id="content"]/div/div[1]/div[3]/div[3]/div/div/p/text()').getall()ifresponseisnotNoneelseNone#提取標簽
book_labels=response.xpath('//div[@id="db-tags-section"]/div/span/a/text()').getall()#將爬取的字段賦給item實例對象
self.item['book_score']=''.join(book_score)self.item['book_labels']=''.join(book_labels[0]iflen(b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年臺安縣教育系統(tǒng)面向師范類院校應屆畢業(yè)生校園招聘13人備考題庫及參考答案詳解
- 廣州市天河區(qū)靈秀小學2025年12月公開招聘編外聘用制專任教師二次延遲備考題庫及參考答案詳解一套
- 2025年九江一中招聘備考題庫完整參考答案詳解
- 2025年西安交通大學第一附屬醫(yī)院胸外科招聘派遣制助理醫(yī)生備考題庫含答案詳解
- 2025年中建三局北京公司總部職能管理崗位校園招聘備考題庫及參考答案詳解一套
- 2025年廣州市花都區(qū)華僑初級中學招聘備考題庫有答案詳解
- 2025年保山市隆陽區(qū)蒲縹鎮(zhèn)中心衛(wèi)生院公開招聘見習人員、鄉(xiāng)村醫(yī)生備考題庫及答案詳解1套
- 儋州市教育局2025年赴高校公開(考核)招聘中學教師備考題庫(一)及參考答案詳解1套
- 觀賞魚飼養(yǎng)技巧題庫及答案
- 2025年新余燃氣有限公司工作人員面向江投集團內(nèi)部公開招聘備考題庫帶答案詳解
- 求職OMG-大學生就業(yè)指導與技能開發(fā)智慧樹知到期末考試答案章節(jié)答案2024年中國海洋大學
- JBT 7387-2014 工業(yè)過程控制系統(tǒng)用電動控制閥
- A課堂懲罰游戲
- 整理收納師行業(yè)分析
- GB/T 228.1-2021金屬材料拉伸試驗第1部分:室溫試驗方法
- 氫能與燃料電池-課件-第五章-制氫技術(shù)
- 科研倫理與學術(shù)規(guī)范-課后作業(yè)答案
- 2023QC小組活動基礎(chǔ)知識培訓
- 生理學期末考試復習試題庫及答案
- 旅游地理學 國家公園建設與管理
- JJF(石化)036-2020漆膜附著力測定儀(劃圈法)校準規(guī)范
評論
0/150
提交評論