python網絡爬蟲(2)——scrapy框架的基礎使用


    這里寫一下爬蟲大概的步驟,主要是自己鞏固一下知識,順便復習一下。

一,網絡爬蟲的步驟

1,創建一個工程

scrapy  startproject   工程名稱

  創建好工程后,目錄結構大概如下:

其中:

  scrapy.cfg:項目的主配置信息(真正爬蟲相關的配置信息在settings.py文件中)

  items.py:設置數據存儲模板,用於結構化數據,如:Django的Model

  pipelines:數據持久化處理

  settings.py:配置文件,如:遞歸的層數,並發數,延遲下載等

  spiders:爬蟲目錄,如:創建文件,編寫爬蟲解析規則

2,在工程目錄下創建一個爬蟲文件

1, cd 工程


2,scrapy  genspider  example  example.com

    其中: example:表示爬蟲文件的名稱
              example.com 表示起始的url(這個url可以隨意寫,最后在文件中修改即可)

  

3,對應的文件中編寫爬蟲程序來完成爬蟲的相關操作

  打開first.py,然后進入編寫:

 

4,配置文件的編寫

  進入settings.py 中修改2個地方:

1,在大概19行中:對請求載體的身份進行偽裝
       我們可以去谷歌中找一個User-Agent的值 復制進去。效果如下:

USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36
 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'


2,在大概22行中,修改robots協議
    robots協議是君子協議,大概爬蟲的話,我們可以不遵照這個協議,哈哈哈哈


    ROBOTSTXT_OBEY = False

  

5,執行

scrapy  crwal  爬蟲文件的名稱   --nolog(組織日志信息的輸出)

#  輸出打印信息
    scrapy  crawl  first  
 
# 不輸出打印信息
    scrapy  crawl  first   --nolog

  效果如下:

 

 

【爬取的是楊子晚報,這里就以此為例,創建scrapy爬蟲 網址:http://www.yangtse.com/】

第一步:安裝scrapy框架

(這里不做詳細介紹了,要是安裝遇到問題的朋友們,可以參考下面鏈接

  http://www.cnblogs.com/wj-1314/p/7856695.html

第二步:創建scrapy爬蟲文件

  格式:scrapy startproject  + 項目名稱

scrapy startproject yangzi

  

第三步:進入爬蟲文件

  格式:cd  項目名稱

cd yangzi

 

第四步:創建爬蟲項目

  格式:scrapy genspider -t basic  項目名稱  網址

  具體用法如下:

 

scrapy genspider -t basic yz http://www.yangtse.com/

  創建好了,如下圖:

解釋一下文件:

  • scrapy.cfg:項目的配置文件
  • yangzi:該項目的python模塊。之后您將在此加入代碼。
  • yangzi/items.py:項目中的item文件。
  • yangzi/pipelines.py:項目中的pipelines文件。
  • yangzi/yz/:放置spider代碼的目錄。

第五步:進入爬蟲項目中,先寫items

    寫這個的目的就是告訴項目,你要爬去什么東西,比如標題,鏈接,作者等.

    Item是保存爬取到的數據的容器:其使用方法和python字典類似,並且提供了額外保護機制來避免拼寫錯誤導致的未定義字段錯誤。 
   類似在ORM中做的一樣,你可以通過創建一個scrapy.Item類,並且定義類型為scrapy.Field的類屬性來定義一個Item。 
   首先根據需要從dmoz.org獲取到的數據對item進行建模。我們需要從dmoz中獲取名字,url,以及網站的描述。對此,在item中定義相應的字段。

  以我寫的為例,我想爬取標題,鏈接,內容,如下:

class YangziItem(scrapy.Item):
    # define the fields for your item here like:
    #標題
    title = scrapy.Field()
    #鏈接
    link =  scrapy.Field()
    #內容
    text =  scrapy.Field()

 

第六步:進入pipelines,設置相應程序

    分析爬去的網站,依次爬取的東西,因為pipelines是進行后續處理的,比如把數據寫入MySQL,或者寫入本地文檔啊等等,就在pipelies里面寫。這里直接輸出,不做數據庫的導入處理

class YangziPipeline(object):
    def process_item(self, item, spider):
        print(item["title"])
        print(item["link"])
        return item

 

第七步:再寫自己創建的爬蟲

    (其實,爬蟲和pipelines和settings前后順序可以顛倒,這個不重要,但是一定要先寫items)

     Spider是用戶編寫用於從單個網站(或者一些網站)爬取數據的類。 
     其包含了一個用於下載的初始url,如何跟進網頁中的鏈接以及如何分析頁面中的內容,提取生成item的方法。 
   為了創建一個Spider,您必須繼承scrapy.Spider類,且定義以下三個屬性:

    • name:用於區別Spider。改名字必須是唯一的,您不可以為不同的Spider設定相同的名字。
    • start_urls:包含了Spider在啟動時進行爬取的url列表。因此,第一個被獲取的頁面給將是其中之一。后續的URL則從初始的URL獲取到的數據中提取。
    • parse():是spider的一個方法。被調用時,每個初始url完成下載后生成的Response對象將會作為唯一的參數傳遞給該函數。該方法負責解析返回的數據(response data),提取數據(生成item)以及生成需要進一步處理的URL的Request對象。

  進入爬蟲后,先導入items,接下來需要創建一個ITEM容器,

 it = YangziItem()

  然后寫自己的要爬去的內容,分析網頁后,利用xpath寫

   def parse(self, response):
        it = YangziItem()
        it["title"] = response.xpath('//div[@class="box-text-title]/text()').extract()
        it["link"] = response.xpath('//a[@target="_blank"]/@href').extract()
        #it["text"] = response.xpath().extract()
        yield it

第八步:設置settings

  在settings中配置pipelines(ctrl+f 找到pipelines,然后解除那三行的注釋,大約在64-68行之間),如下圖

第九步:運行爬蟲文件

scrapy crawl yz
scrapy crawl yz --nolog #不想顯示日志文件

 


免責聲明!

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



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