Scrapy抓取外星人源碼網(wǎng)

Scrapy筆記-完整實例

這篇文章通過一個比較完整的例子來指導使用scrapy,我選擇抓取外星人源碼網(wǎng)的帖子列表。
?這里我們主要需要完成以下幾個步驟:

  • 創(chuàng)建一個新的scrapy工程
  • 定義你所需要抽取的Item對象
  • 編寫一個Spider來爬取某個網(wǎng)站并提取出所有的Item對象
  • 編寫一個Item Pipline來存儲提取出來的Item對象
    ?Scrapy使用python語言編寫,需要有python語言基礎。

創(chuàng)建一個Scrapy工程

在任意一個你喜歡的目錄執(zhí)行以下命令即可創(chuàng)建一個新的工程:

scrapy startproject eenotScrapy

將會創(chuàng)建eenot文件夾,其目錄結構如下:


目錄結構

,scrapy項目創(chuàng)建完成。

定義我們的Item

?我們通過創(chuàng)建一個scrapy.item類,并定義的它的類型為scrapt.Field的屬性,我們準備將外星人源碼論壇帖子的標題,日期和簡介爬取下來。

import scrapy
class EenotItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    posts_title = scrapy.Field()
    posts_date = scrapy.Field()
    posts_des = scrapy.Field()

編寫一個Spider

?這個部分主要是自定義的一些類,Scrapy使用它們來從一個domain爬取信息,在spider中定義了一個初始化的URL下載列表,以及怎樣來跟蹤鏈接,如何解析頁面來提取Item。
?定義一個Spider,需要繼承scrapy.spider類并定一些屬性:

  • name:Spider的名稱,必須是唯一的
  • start_urls:初始化下載鏈接URL
  • parse():用來解析下載后的Response獨享,該對象也是這個方法的唯一參數(shù)。

?我們使用以下命令新建一個eenotSpider腳本:

scrapy genspider eenotSpider eenot.com

?初始化腳本完成后在腳本中填入以下內容:

# -*- coding: utf-8 -*-
import scrapy
from eenot.items import EenotItem
import logging


class EenotspiderSpider(scrapy.Spider):
    name = "eenotSpider"
    allowed_domains = ["eenot.com"]
    start_urls = ['https://www.eenot.com/portal.php?order=dateline&page=1']

    def parse(self, response):
        page_num = 5
        if response.status == 200:
            item = EenotItem()
            item['posts_title'] = response.xpath("http://h1[@class='post_title']//a/text()").extract()
            item['posts_date'] = response.xpath("http://div[@class='post_date']/text()").extract()
            item['posts_des'] = response.xpath("http://p[@class='post_brief']/text()").extract()
            yield item
        for i in range(2, page_num + 1):
            next_page_url = "https://www.eenot.com/portal.php?order=dateline&page="+str(i)+""
            yield scrapy.Request(next_page_url,callback=self.parse)

?xpath抓取語法相關資料請看xpath教程

運行爬蟲

?在根目錄下執(zhí)行以下命令,其中eenotSpider是自己定義的腳本的名字:

scrapy crawl eenotSpider

?如果一切正常,應該可以打印出每個帖子的標題,日期和簡述

處理連接

?待更新

導出抓取結果

最簡單的保存抓取數(shù)據(jù)的方式就是使用jsin格式的文件保存在本地,想下面這樣運行:

scrapy crawl eenotScrapy -o abc.json

這里足矣,后續(xù)還需要自己編寫Item Pipeline。

保存數(shù)據(jù)到數(shù)據(jù)庫

?數(shù)據(jù)庫待安裝

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容