1. 程式人生 > >Scrapy框架-scrapy框架快速入門

Scrapy框架-scrapy框架快速入門

屬性 運行 erb als erro 系統 sse 令行 The

1.安裝和文檔

  • 安裝:通過pip install scrapy即可安裝。
  • Scrapy官方文檔:http://doc.scrapy.org/en/latest
  • Scrapy中文文檔:http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html
  • 註意事項:
在ubuntu上安裝scrapy之前,需要先安裝以下依賴:
sudo apt-get install python3-dev build-essential python3-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev,然後再通過pip install scrapy安裝。
如果在windows系統下,提示這個錯誤ModuleNotFoundError: No module named 'win32api',那麽使用以下命令可以解決:pip install pypiwin32。

2.快速入門
2.1 創建項目
要使用Scrapy框架創建項目,需要通過命令來創建。首先進入到你想把這個項目存放的目錄。
然後使用以下命令創建:scrapy startproject [項目名稱]
2.2 目錄結構介紹

# 創建一個項目步驟
# 2.1.1 在D盤創建一個文件夾`spiders_code`
# 2.1.2 打開cmd終端,cd到剛才創建的文件夾`spiders_code`
# 2.1.3 執行命令`D:\spiders_code> scrapy startproject qsbk`創建項目

技術分享圖片

以下介紹下主要文件的作用:

  • items.py:用來存放爬蟲爬取下來數據的模型。
  • middlewares.py:用來存放各種中間件的文件。
  • pipelines.py:用來將items的模型存儲到本地磁盤中。
  • settings.py:本爬蟲的一些配置信息(比如請求頭、多久發送一次請求、ip代理池等)。
  • scrapy.cfg:項目的配置文件。
  • spiders包:以後所有的爬蟲,都是存放到這個裏面

3.使用Scrapy框架爬取糗事百科段子
3.1 使用命令創建一個爬蟲
scrapy gensipder qsbk "qiushibaike.com"
創建了一個名字叫做qsbk的爬蟲,並且能爬取的網頁只會限制在qiushibaike.com這個域名下。
3.2爬蟲代碼解析

import scrapy

class QsbkSpider(scrapy.Spider):
    name = 'qsbk'
    allowed_domains = ['qiushibaike.com']
    start_urls = ['http://qiushibaike.com/']

    def parse(self, response):
        pass

其實這些代碼我們完全可以自己手動去寫,而不用命令。只不過是不用命令,自己寫這些代碼比較麻煩。
要創建一個Spider,那麽必須自定義一個類,繼承自scrapy.Spider,然後在這個類中定義三個屬性和一個方法。

  • name:這個爬蟲的名字,名字必須是唯一的。
  • allow_domains:允許的域名。爬蟲只會爬取這個域名下的網頁,其他不是這個域名下的網頁會被自動忽略。
  • start_urls:爬蟲從這個變量中的url開始。
  • parse:引擎會把下載器下載回來的數據扔給爬蟲解析,爬蟲再把數據傳給這個parse方法。這個是個固定的寫法。這個方法的作用有兩個,第一個是提取想要的數據。第二個是生成下一個請求的url。

3.3 修改settings.py代碼
在做一個爬蟲之前,一定要記得修改setttings.py中的設置。兩個地方是強烈建議設置的。

  • ROBOTSTXT_OBEY設置為False。默認是True。即遵守機器協議,那麽在爬蟲的時候,scrapy首先去找robots.txt文件,如果沒有找到。則直接停止爬取。
  • DEFAULT_REQUEST_HEADERS添加User-Agent。這個也是告訴服務器,我這個請求是一個正常的請求,不是一個爬蟲。

3.4 完成的爬蟲代碼

# 3.4.1 爬蟲部分代碼
import scrapy
from abcspider.items import QsbkItem

class QsbkSpider(scrapy.Spider):
    name = 'qsbk'
    allowed_domains = ['qiushibaike.com']
    start_urls = ['https://www.qiushibaike.com/text/']

    def parse(self, response):
        outerbox = response.xpath("//div[@id='content-left']/div")
        items = []
        for box in outerbox:
            author = box.xpath(".//div[contains(@class,'author')]//h2/text()").extract_first().strip()
            content = box.xpath(".//div[@class='content']/span/text()").extract_first().strip()
            item = QsbkItem()
            item["author"] = author
            item["content"] = content
            items.append(item)
        return items
# 3.4.2 items.py部分代碼
import scrapy
class QsbkItem(scrapy.Item):
    author = scrapy.Field()
    content = scrapy.Field()
# 3.4.3 pipeline部分代碼
import json

 class AbcspiderPipeline(object):
     def __init__(self):

         self.items = []

     def process_item(self, item, spider):
         self.items.append(dict(item))
         print("="*40)
         return item

     def close_spider(self,spider):
         with open('qsbk.json','w',encoding='utf-8') as fp:
             json.dump(self.items,fp,ensure_ascii=False)

3.5 運行scrapy項目
運行scrapy項目。需要在終端,進入項目所在的路徑,然後scrapy crawl [爬蟲名字]即可運行指定的爬蟲。如果不想每次都在命令行中運行,那麽可以把這個命令寫在一個文件中。以後就在pycharm中執行運行這個文件就可以了。
比如現在新創建一個文件叫做start.py,然後在這個文件中填入以下代碼:

from scrapy import cmdline

cmdline.execute("scrapy crawl qsbk".split())

Scrapy框架-scrapy框架快速入門