使用Scrapy框架爬取網(wǎng)頁并保存到Mysql的實現(xiàn)
大家好,這一期阿彬給大家分享Scrapy爬蟲框架與本地Mysql的使用。今天阿彬爬取的網(wǎng)頁是虎撲體育網(wǎng)。
(1)打開虎撲體育網(wǎng),分析一下網(wǎng)頁的數(shù)據(jù),使用xpath定位元素。

(2)在第一部分析網(wǎng)頁之后就開始創(chuàng)建一個scrapy爬蟲工程,在終端執(zhí)行以下命令:
“scrapy startproject huty(注:‘hpty’是爬蟲項目名稱)”,得到了下圖所示的工程包:

(3)進(jìn)入到“hpty/hpty/spiders”目錄下創(chuàng)建一個爬蟲文件叫‘“sww”,在終端執(zhí)行以下命令: “scrapy genspider sww” (4)在前兩步做好之后,對整個爬蟲工程相關(guān)的爬蟲文件進(jìn)行編輯。 1、setting文件的編輯:
把君子協(xié)議原本是True改為False。

再把這行原本被注釋掉的代碼把它打開。

2、對item文件進(jìn)行編輯,這個文件是用來定義數(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()
球隊 = scrapy.Field()
排名 = scrapy.Field()
場均得分 = scrapy.Field()
命中率 = scrapy.Field()
三分命中率 = scrapy.Field()
罰球命中率 = scrapy.Field()3、對最重要的爬蟲文件進(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() # 球員
球隊 = i.xpath(
'./td[3]/a/text()').extract() # 球隊
場均得分 = 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(球員=球員, 球隊=球隊, 排名=排名, 場均得分=場均得分, 命中率=命中率, 三分命中率=三分命中率, 罰球命中率=罰球命中率)
yield data4、對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]
球隊 = item["球隊"][0]
排名 = item["排名"][0]
場均得分 = item["場均得分"][0]
命中率 = item["命中率"]
三分命中率 = item["三分命中率"][0]
罰球命中率 = item["罰球命中率"][0]
# 三分命中率 = item["三分命中率"][0].strip('%')
# 罰球命中率 = item["罰球命中率"][0].strip('%')
cursor.execute(
'INSERT INTO nba(球員,球隊,排名,場均得分,命中率,三分命中率,罰球命中率) VALUES (%s,%s,%s,%s,%s,%s,%s)',
(球員, 球隊, 排名, 場均得分, 命中率, 三分命中率, 罰球命中率)
)
# 對事務(wù)操作進(jìn)行提交
db.commit()
# 關(guān)閉游標(biāo)
cursor.close()
db.close()
return item(5)在scrapy框架設(shè)計好了之后,先到mysql創(chuàng)建一個名為“sww”的數(shù)據(jù)庫,在該數(shù)據(jù)庫下創(chuàng)建名為“nba”的數(shù)據(jù)表,代碼如下: 1、創(chuàng)建數(shù)據(jù)庫
create database sww;
2、創(chuàng)建數(shù)據(jù)表
create table nba (球員 char(20),球隊 char(10),排名 char(10),場均得分 char(25),命中率 char(20),三分命中率 char(20),罰球命中率 char(20));
3、通過創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表可以看到該表的結(jié)構(gòu):

(6)在mysql創(chuàng)建數(shù)據(jù)表之后,再次回到終端,輸入如下命令:“scrapy crawl sww”,得到的結(jié)果
到此這篇關(guān)于使用Scrapy框架爬取網(wǎng)頁并保存到Mysql的實現(xiàn)的文章就介紹到這了,更多相關(guān)Scrapy爬取網(wǎng)頁并保存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實現(xiàn)ipsec開權(quán)限實例
這篇文章主要介紹了python實現(xiàn)ipsec開權(quán)限的方法,彌補(bǔ)了windows自帶的命令行工具netsh ipsec static add filter不支持批量添加及添加重復(fù)規(guī)則的不足,非常具有實用價值,需要的朋友可以參考下2014-11-11
Python獲取好友地區(qū)分布及好友性別分布情況代碼詳解
利用Python + wxpy 可以快速的查詢自己好友的地區(qū)分布情況,以及好友的性別分布數(shù)量。還可以批量下載好友的頭像,拼接成大圖。感興趣的朋友跟隨小編一起看看吧2019-07-07
python time模塊時間戳 與 結(jié)構(gòu)化時間詳解
這篇文章主要介紹了python time模塊 時間戳 與 結(jié)構(gòu)化時間的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
pandas常用表連接merge/concat/join/append詳解
使用python的pandas庫可以很容易幫你搞定,而且性能也是很出色的;百萬級的表關(guān)聯(lián),可以秒出,本文給大家分享pandas常用表連接merge/concat/join/append詳解,感興趣的朋友跟隨小編一起看看吧2023-02-02
Python正確調(diào)用 jar 包加密得到加密值的操作方法
這篇文章主要介紹了Python 正確調(diào)用 jar 包加密得到加密值的操作方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08
Python利用tkinter和socket實現(xiàn)端口掃描
這篇文章主要為大家詳細(xì)介紹了Python如何利用tkinter和socket實現(xiàn)端口掃描功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下2022-12-12

