使用Scrapy框架爬取網(wǎng)頁(yè)并保存到Mysql的實(shí)現(xiàn)
大家好,這一期阿彬給大家分享Scrapy爬蟲(chóng)框架與本地Mysql的使用。今天阿彬爬取的網(wǎng)頁(yè)是虎撲體育網(wǎng)。
(1)打開(kāi)虎撲體育網(wǎng),分析一下網(wǎng)頁(yè)的數(shù)據(jù),使用xpath定位元素。
(2)在第一部分析網(wǎng)頁(yè)之后就開(kāi)始創(chuàng)建一個(gè)scrapy爬蟲(chóng)工程,在終端執(zhí)行以下命令:
“scrapy startproject huty(注:‘hpty’是爬蟲(chóng)項(xiàng)目名稱)”,得到了下圖所示的工程包:
(3)進(jìn)入到“hpty/hpty/spiders”目錄下創(chuàng)建一個(gè)爬蟲(chóng)文件叫‘“sww”,在終端執(zhí)行以下命令: “scrapy genspider sww” (4)在前兩步做好之后,對(duì)整個(gè)爬蟲(chóng)工程相關(guān)的爬蟲(chóng)文件進(jìn)行編輯。 1、setting文件的編輯:
把君子協(xié)議原本是True改為False。
再把這行原本被注釋掉的代碼把它打開(kāi)。
2、對(duì)item文件進(jìn)行編輯,這個(gè)文件是用來(lái)定義數(shù)據(jù)類型,代碼如下:
# Define here the models for your scraped items # # See documentation in: # https://docs.scrapy.org/en/latest/topics/items.html import scrapy class HptyItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() 球員 = scrapy.Field() 球隊(duì) = scrapy.Field() 排名 = scrapy.Field() 場(chǎng)均得分 = scrapy.Field() 命中率 = scrapy.Field() 三分命中率 = scrapy.Field() 罰球命中率 = scrapy.Field()
3、對(duì)最重要的爬蟲(chóng)文件進(jìn)行編輯(即“hpty”文件),代碼如下:
import scrapy from ..items import HptyItem class SwwSpider(scrapy.Spider): name = 'sww' allowed_domains = ['https://nba.hupu.com/stats/players'] start_urls = ['https://nba.hupu.com/stats/players'] def parse(self, response): whh = response.xpath('//tbody/tr[not(@class)]') for i in whh: 排名 = i.xpath( './td[1]/text()').extract()# 排名 球員 = i.xpath( './td[2]/a/text()').extract() # 球員 球隊(duì) = i.xpath( './td[3]/a/text()').extract() # 球隊(duì) 場(chǎng)均得分 = i.xpath( './td[4]/text()').extract() # 得分 命中率 = i.xpath( './td[6]/text()').extract() # 命中率 三分命中率 = i.xpath( './td[8]/text()').extract() # 三分命中率 罰球命中率 = i.xpath( './td[10]/text()').extract() # 罰球命中率 data = HptyItem(球員=球員, 球隊(duì)=球隊(duì), 排名=排名, 場(chǎng)均得分=場(chǎng)均得分, 命中率=命中率, 三分命中率=三分命中率, 罰球命中率=罰球命中率) yield data
4、對(duì)pipelines文件進(jìn)行編輯,代碼如下:
# Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html # useful for handling different item types with a single interface from cursor import cursor from itemadapter import ItemAdapter import pymysql class HptyPipeline: def process_item(self, item, spider): db = pymysql.connect(host="Localhost", user="root", passwd="root", db="sww", charset="utf8") cursor = db.cursor() 球員 = item["球員"][0] 球隊(duì) = item["球隊(duì)"][0] 排名 = item["排名"][0] 場(chǎng)均得分 = item["場(chǎng)均得分"][0] 命中率 = item["命中率"] 三分命中率 = item["三分命中率"][0] 罰球命中率 = item["罰球命中率"][0] # 三分命中率 = item["三分命中率"][0].strip('%') # 罰球命中率 = item["罰球命中率"][0].strip('%') cursor.execute( 'INSERT INTO nba(球員,球隊(duì),排名,場(chǎng)均得分,命中率,三分命中率,罰球命中率) VALUES (%s,%s,%s,%s,%s,%s,%s)', (球員, 球隊(duì), 排名, 場(chǎng)均得分, 命中率, 三分命中率, 罰球命中率) ) # 對(duì)事務(wù)操作進(jìn)行提交 db.commit() # 關(guān)閉游標(biāo) cursor.close() db.close() return item
(5)在scrapy框架設(shè)計(jì)好了之后,先到mysql創(chuàng)建一個(gè)名為“sww”的數(shù)據(jù)庫(kù),在該數(shù)據(jù)庫(kù)下創(chuàng)建名為“nba”的數(shù)據(jù)表,代碼如下: 1、創(chuàng)建數(shù)據(jù)庫(kù)
create database sww;
2、創(chuàng)建數(shù)據(jù)表
create table nba (球員 char(20),球隊(duì) char(10),排名 char(10),場(chǎng)均得分 char(25),命中率 char(20),三分命中率 char(20),罰球命中率 char(20));
3、通過(guò)創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)表可以看到該表的結(jié)構(gòu):
(6)在mysql創(chuàng)建數(shù)據(jù)表之后,再次回到終端,輸入如下命令:“scrapy crawl sww”,得到的結(jié)果
到此這篇關(guān)于使用Scrapy框架爬取網(wǎng)頁(yè)并保存到Mysql的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Scrapy爬取網(wǎng)頁(yè)并保存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
獲取django框架orm query執(zhí)行的sql語(yǔ)句實(shí)現(xiàn)方法分析
這篇文章主要介紹了獲取django框架orm query執(zhí)行的sql語(yǔ)句實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Django框架中orm query執(zhí)行的sql語(yǔ)句獲取方法相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-06-06python實(shí)現(xiàn)的多任務(wù)版udp聊天器功能案例
這篇文章主要介紹了python實(shí)現(xiàn)的多任務(wù)版udp聊天器功能,結(jié)合具體案例形式分析了Python基于udp的聊天器功能相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2019-11-11python雙向鏈表實(shí)現(xiàn)實(shí)例代碼
python雙向鏈表和單鏈表類似,只不過(guò)是增加了一個(gè)指向前面一個(gè)元素的指針,下面的代碼實(shí)例了python雙向鏈表的方法2013-11-11如何在mac環(huán)境中用python處理protobuf
這篇文章主要介紹了如何在mac環(huán)境中用python處理protobuf,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Python利用matplotlib實(shí)現(xiàn)制作動(dòng)態(tài)條形圖
說(shuō)到用 Python 制作動(dòng)態(tài)圖,首先想到的肯定是一些直接拿來(lái)就用的庫(kù),雖然我沒(méi)做過(guò),但是我相信一定有且不止一個(gè),搜了一圈后發(fā)現(xiàn)有個(gè)bar chart race庫(kù)看起來(lái)不錯(cuò),感興趣的可以跟隨小編一起學(xué)習(xí)一下2022-10-10