python爬蟲Scrapy框架

xx20cw發表於2018-11-21

Scrapy框架

是一個Python爬蟲框架,適合做一些大型爬蟲專案。


Scrapy框架常見命令:

1、基本格式:scrapy   命令名  -引數(如scrapy fetch –h顯示fetch命令幫助,fetch顯示爬蟲爬取過程)

2、Shell命令,啟動Scrapy互動終端 >scrapy shell http://www.baidu.com --nolog

3、Startproject命令   建立爬蟲專案: scrapy startproject   first(爬蟲專案名)

4、Version命令    scrapy version

5、View命令  下載某個網頁,並且用瀏覽器檢視   scrapy view http://news.163.com

6、bench命令測試本地效能

7、scrapy genspider -l   展示爬蟲模板

8、scrapy genspider –t basic csc baidu.com 基於basic模板建立csc爬取百度

9、Scrapy check csc(爬蟲名)命令用於測試

10、scrapy crawl csc命令用於啟動某個爬蟲檔案

11、scrapy list展示當前專案下,可用的爬蟲名

12、scrapy edit csc用於開啟編輯器編輯爬蟲(這個命令只能用於linux系統)

13、scrapy parse http://www.baidu.com獲取指定url網址,並行分析處理

Xpath表示式:執行效率比正規表示式快

/表示從頂端開始尋找標籤(如/html表示從html頂端開始尋找,/html/head提取html下的head這個標籤裡面所有的內容)。

/html/head/title/text()提取網頁的標題內容。

Text()提取文字資訊

@提取標籤裡面的屬性資訊

//尋找當前頁所有的標籤   //li[@屬性=。。](//li[@class=’hidden-xs’]/a@href)

第一個scrapy爬蟲:

思路:首先編輯爬蟲專案裡面的items.py,設定爬取的目標,pipelines設定後續的處理,settings設定對應的配置資訊。

  1. 在cmd中進入爬蟲專案資料夾,執行命令scrapy genspider –t basic csc baidu.com

基於basic模板建立csc爬取百度

2、用pycharm開啟專案檔案,編輯items.py檔案

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class FirstItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    content = scrapy.Field()#建立容器
    link = scrapy.Field()

3、進入pipelines.py設定後續處理

class FirstPipeline(object):
   
def process_item(self, item, spider):
       
print(item['content'])#處理方式
       
return item

 

4、進入settings檔案,進行設定,找到pipelines,取消註釋

ITEM_PIPELINES = {

    'first.pipelines.FirstPipeline': 300,

}

5、將robots.txt rules爬蟲規則,設定圍毆不遵守

# Obey robots.txt rules

ROBOTSTXT_OBEY = False

6、最後編輯爬蟲檔案

import scrapy

from first.items import FirstItem

class CscSpider(scrapy.Spider):

    name = 'csc'

    allowed_domains = ['baidu.com']

    start_urls = ['http://www.baidu.com/']

    def parse(self, response):

        item = FirstItem()

      item['content']=response.xpath('/html/head/title/text()').extract()

        yield item

相關文章