python爬蟲(chóng)小練手之用Scrapy爬取某小說(shuō)網(wǎng)站中三國(guó)演義

一、學(xué)習(xí)課題

使用Scrapy爬取某小說(shuō)網(wǎng)站的內(nèi)容

二、學(xué)習(xí)目標(biāo)

1.掌握Scrapy的安裝方法
2.掌握Scrapy的基本用法

三、所用到的工具

1.pycharm
2.Scrapy庫(kù)
3.re(正則)庫(kù) (還可以用etree,xpath,bs4等)
4.Powershell

四、開(kāi)始項(xiàng)目

(一)安裝Scrapy庫(kù)

打開(kāi)cmd命令行工具,輸入以下代碼

pip install scrapy
  • 拓展內(nèi)容:
    調(diào)用鏡像庫(kù)
    1.臨時(shí)使用
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scrapy

2.設(shè)為默認(rèn)(升級(jí) pip 到最新的版本 (>=10.0.0) 后進(jìn)行配置)

pip install pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

(二)創(chuàng)建項(xiàng)目

1.在桌面(或別處)創(chuàng)建一個(gè)文件夾,命名為scrapy項(xiàng)目,作為存放scrapy項(xiàng)目的文件夾。

title.png

2.在文件夾中按住shfit鍵+鼠標(biāo)右鍵調(diào)出powershell窗口
3.輸入代碼:

scrapy startproject sgyy   #sgyy為項(xiàng)目名稱

4.scrapy項(xiàng)目文件目錄下自動(dòng)生成了sgyy文件夾

(三)創(chuàng)建爬蟲(chóng)

1.在sgyy目錄下進(jìn)入powershell
2.輸入代碼:

scrapy genspider sgyyspider purepen.com    #scrapy genspider+爬蟲(chóng)名+域名
#運(yùn)行后在scrapy項(xiàng)目\sgyy\sgyy\spiders 目錄下生成了sgyyspider.py文件,這就是創(chuàng)建的爬蟲(chóng)核心

(四)編寫(xiě)爬蟲(chóng)

在pycharm中打開(kāi)sgyyspider.py文件進(jìn)行編寫(xiě)爬蟲(chóng)

# -*- coding: utf-8 -*-
import scrapy   
import re           #正則


class SgyyspiderSpider(scrapy.Spider):
    name = 'sgyySpider'                      #爬蟲(chóng)名字
    allowed_domains = ['purepen.com']        #網(wǎng)站
    start_urls = ['http://www.purepen.com/sgyy/index.htm']    #第一次開(kāi)始采集的網(wǎng)址(要爬取的網(wǎng)站)


    def parse(self, response):
#   從這里以上是scrapy自動(dòng)創(chuàng)建好的內(nèi)容,start_urls采集的信息返回交給了response
        html = re.findall('<TD><A HREF="(.*?)">',response.text)
        #.*?匹配任何你需要的信息 除了換行
        #.匹配任何單個(gè)字符 除了換行符
        #*數(shù)量詞 任意多個(gè)字符
        #?在數(shù)量詞后表示非貪婪模式
        for i in html:
            url = f'http://www.purepen.com/sgyy/{i}'  #.format
#            print(url)
            yield scrapy.Request(url, callback=self.parseDetail)
    def parseDetail (self,response):
        text = re.findall('face="宋體" size="3">(.*?)</font>', response.text, flags=re.S)
        title = re.findall('<font color="#000000"  size="3"><br><br><b>(.*?)</b>', response.text)
        if text and title:
            self.save2File(title[0],text[0])

    @classmethod
    def save2File(cls, title, text):
        with open(f'{title}.text', 'a', encoding='utf-8')as fp:
            fp.write(text)

(五)運(yùn)行爬蟲(chóng)

在爬蟲(chóng)文件目錄下打開(kāi)powershell輸入以下代碼

scrapy crawl sgyySpider

(六)運(yùn)行結(jié)果

在爬蟲(chóng)文件夾下生成了我們想要爬取的小說(shuō)內(nèi)容,每一章節(jié)為一個(gè)txt文件,共120個(gè)

五、總結(jié)

(一)關(guān)于re正則表達(dá)式

1.(.*?)匹配任何你需要的信息 除了換行
2.如果想讓匹配的信息包括換行,則在re.findall()中傳入?yún)?shù):

flags=re.S

3.(.*?)加括號(hào)與不加括號(hào)的區(qū)別:
加括號(hào)是返回匹配到的數(shù)據(jù),不包括其他匹配值
不加括號(hào)返回匹配到的數(shù)據(jù),包括其他匹配值
例如:

<META content="《三國(guó)演義》" name=description>     #《三國(guó)演義》為需要的信息
'<META content="(.*?)" name=description>'         #會(huì)返回'《三國(guó)演義》'
'<META content=".*?" name=description>'           #會(huì)返回<META content="《三國(guó)演義》" name=description>

4.關(guān)于正則表達(dá)式,有待進(jìn)一步學(xué)習(xí)(MARK)

(二)yield的用法

挖個(gè)坑,找時(shí)間專題進(jìn)行學(xué)習(xí)(MARK)

(三)@classmethod

挖個(gè)坑,找時(shí)間專題進(jìn)行學(xué)習(xí)(MARK)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容