一、學(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)目的文件夾。

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)