(十) scrapy框架簡介和基礎應用


今日概要

  • scrapy框架介紹
  • 環境安裝
  • 基礎使用

今日詳情

一.什么是Scrapy?

  Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架,非常出名,非常強悍。所謂的框架就是一個已經被集成了各種功能(高性能異步下載,隊列,分布式,解析,持久化等)的具有很強通用性的項目模板。對於框架的學習,重點是要學習其框架的特性、各個功能的用法即可。

二.安裝

Linux:
      pip3 install scrapy

Windows:
      1. pip3 install wheel
      2. 下載twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
      3. 進入下載目錄,執行 pip3 install Twisted-19.2.1-cp36-cp36m-win_amd64.whl
      4. pip3 install pywin32
      5. pip3 install scrapy

三.基礎使用

1.創建項目:scrapy startproject 項目名稱

項目結構:

project_name/
   scrapy.cfg:
   project_name/
       __init__.py
       items.py
       pipelines.py
       settings.py
       spiders/
           __init__.py

scrapy.cfg   項目的主配置信息。(真正爬蟲相關的配置信息在settings.py文件中)
items.py     設置數據存儲模板,用於結構化數據,如:Django的Model
pipelines    數據持久化處理
settings.py  配置文件,如:遞歸的層數、並發數,延遲下載等
spiders      爬蟲目錄,如:創建文件,編寫爬蟲解析規則

2.創建爬蟲應用程序:

cd project_name(進入項目目錄)
scrapy genspider 應用名稱 爬取網頁的起始url (例如:scrapy genspider qiubai www.qiushibaike.com)

3.編寫爬蟲文件:在步驟2執行完畢后,會在項目的spiders中生成一個應用名的py爬蟲文件,文件源碼如下:

# -*- coding: utf-8 -*-
import scrapy

class QiubaiSpider(scrapy.Spider):
    name = 'qiubai' #應用名稱
    #允許爬取的域名(如果遇到非該域名的url則爬取不到數據)
    allowed_domains = ['https://www.qiushibaike.com/']
    #起始爬取的url
    start_urls = ['https://www.qiushibaike.com/']

     #訪問起始URL並獲取結果后的回調函數,該函數的response參數就是向起始的url發送請求后,獲取的響應對象.該函數返回值必須為可迭代對象或者NUll 
     def parse(self, response):
        print(response.text) #獲取字符串類型的響應內容
        print(response.body)#獲取字節類型的相應內容

4.設置修改settings.py配置文件相關配置:

修改內容及其結果如下:
19行:USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' #偽裝請求載體身份

22行:ROBOTSTXT_OBEY = False  #可以忽略或者不遵守robots協議

5.執行爬蟲程序:scrapy crawl  應用名稱

四.小試牛刀:將糗百首頁中段子的內容和標題進行爬取

# -*- coding: utf-8 -*-
import scrapy

class QiubaiSpider(scrapy.Spider):
    name = 'qiubai'
    allowed_domains = ['https://www.qiushibaike.com/']
    start_urls = ['https://www.qiushibaike.com/']

    def parse(self, response):
        #xpath為response中的方法,可以將xpath表達式直接作用於該函數中
        odiv = response.xpath('//div[@id="content-left"]/div')
        content_list = [] #用於存儲解析到的數據
        for div in odiv:
            #xpath函數返回的為列表,列表中存放的數據為Selector類型的數據。我們解析到的內容被封裝在了Selector對象中,需要調用extract()函數將解析的內容從Selecor中取出。
            author = div.xpath('.//div[@class="author clearfix"]/a/h2/text()')[0].extract()
            content=div.xpath('.//div[@class="content"]/span/text()')[0].extract()

            #將解析到的內容封裝到字典中
            dic={
                '作者':author,
                '內容':content
            }
            #將數據存儲到content_list這個列表中
            content_list.append(dic)

        return content

執行爬蟲程序:

scrapy crawl 爬蟲名稱 :該種執行形式會顯示執行的日志信息
scrapy crawl 爬蟲名稱 --nolog:該種執行形式不會顯示執行的日志信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM