scrapy 爬取糗事百科段子篇章一

目前還是簡單的爬取數據,目前的數據不完全, 個人目前相當於做個筆記,可簡單的做個參看。
在這裏插入圖片描述

一、創建爬蟲項目

scrapy  startproject ITtest
startproject	#開始創建項目
ITtest01		#創建項目名

在這裏插入圖片描述

二、生成爬蟲

cd  qiushi/qiushi/spiders  &&  scrapy  genspider ITtest  www.qiushibaike.com/text/page/1
cat ITtest.py

在這裏插入圖片描述
上面說到url地址,現在說明分析下:
1、訪問第二頁
在這裏插入圖片描述
2、接着url路由將2改成1試試
在這裏插入圖片描述

三、配置爬蟲文件
vim settings.py

BOT_NAME = 'qiushi'
SPIDER_MODULES = ['qiushi.spiders']
NEWSPIDER_MODULE = 'qiushi.spiders'
ROBOTSTXT_OBEY = False   #不遵守robots 協議
CONCURRENT_REQUESTS = 3  #隔3s爬取一次(正常普通網友點擊全部頁面的話3分鐘)
COOKIES_ENABLED = False    
DEFAULT_REQUEST_HEADERS = {
   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
   'Accept-Language': 'en',
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'    #模擬用戶瀏覽器的型號
}
ITEM_PIPELINES = {
    'qiushi.pipelines.QiushiPipeline': 300, #優先級
}

在這裏插入圖片描述

四、自定義item字段

vim  items.py

在這裏插入圖片描述
五、編寫爬蟲文件

vim ITtest.py
import scrapy
from qiushi.items import QiushiItem   #導入糗事項目下items中QiushiItem函數
from scrapy.http.response.html import HtmlResponse   #導入HtmlXPathSelector模塊
from scrapy.selector.unified   import SelectorList   #導入SelectorList模塊

class IttestSpider(scrapy.Spider):
    name = 'ITtest'
    allowed_domains = ['www.qiushibaike.com']
    start_urls = ['https://www.qiushibaike.com/text/page/1/']
    bash_domain = "https://www.qiushibaike.com"

    def parse(self, response):
        body = response.xpath('//div[@class="col1 old-style-col1"]/div')
        for duanzhi in body:
            touxiang = duanzhi.xpath('.//div//@src').get()
            neirong = duanzhi.xpath('.//div[@class="content"]//text()').getall()
            neirong = "".join(neirong).strip()
            zuozhe  = duanzhi.xpath('.//div//h2/text()').get().strip()
            item = QiushiItem(頭像=touxiang,作者=zuozhe,內容=neirong)
            yield item
        next_url = response.xpath("//ul[@class='pagination']/li[last()]/a/@href").get()
        if not next_url:
            return
        else:
            yield  scrapy.Request(self.bash_domain+next_url,callback=self.parse)

六、檢查爬蟲語法

 scrapy check ITtest

在這裏插入圖片描述

七、執行爬蟲腳本

scrapy  crawl  ITtest

在這裏插入圖片描述
八、數據處理儲存

vim pipelines.py
from itemadapter import ItemAdapter
import json

class QiushiPipeline:
    def __init__(self):
        #open自動判斷是否有文件有則不進行創建。w寫入,字符編碼中文
        self.fp = open("qiushi.json","w",encoding='utf-8')

    def process_item(self, item, spider):
        print("爬蟲開始")

    def process_item(self, item, spider):
        #json.dumps 序列化時對中文默認使用的ascii編碼.想輸出真正的中文需要指定ensure_ascii=False
        #item_json = json.dumps(item,ensure_ascii=False)
        item_json = json.dumps(dict(item),ensure_ascii=False)
        self.fp.write(item_json+'\n')
        return item

    def close_spider(self,spider):
        #關閉文件流
        self.fp.close()
        print("爬蟲結束了")

九、再次執行

scrapy crawl ITtest

在這裏插入圖片描述

cat qiushi.json  -n

在這裏插入圖片描述
我們隨便哪一個頭像的url訪問試試
在這裏插入圖片描述

後期規劃,目前只是入門的爬蟲還需要優化,後期將使用mongodb、redis作爲緩存與存儲,當爬蟲腳本多起來將製作成docker鏡像放入k8s中保證服務的穩定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章