一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程

python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程

2022-03-01 11:39夢想橡皮擦 Python

這篇文章主要為大家介紹了python爬蟲框架Scrapy的基本應(yīng)用學(xué)習(xí)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步

在正式編寫爬蟲案例前,先對 scrapy 進行一下系統(tǒng)的學(xué)習(xí)。

 

scrapy 安裝與簡單運行

使用命令 pip install scrapy 進行安裝,成功之后,還需要隨手收藏幾個網(wǎng)址,以便于后續(xù)學(xué)習(xí)使用。

scrapy 官網(wǎng):https://scrapy.org

scrapy 文檔:https://doc.scrapy.org/en/latest/intro/tutorial.html

scrapy 更新日志:https://docs.scrapy.org/en/latest/news.html

安裝完畢之后,在控制臺直接輸入 scrapy,出現(xiàn)如下命令表示安裝成功。

> scrapy
Scrapy 2.5.0 - no active project

Usage:
scrapy <command> [options] [args]

Available commands:

python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程

上述截圖是 scrapy 的內(nèi)置命令列表,標(biāo)準(zhǔn)的格式的 scrapy <command> <options> <args>,通過 scrapy <command> -h 可以查看指定命令的幫助手冊。

scrapy 中提供兩種類型的命令,一種是全局的,一種的項目中的,后者需要進入到 scrapy 目錄才可運行。

這些命令無需一開始就完全記住,隨時可查,有幾個比較常用,例如:

scrpy startproject <項目名>

該命令先依據(jù) 項目名 創(chuàng)建一個文件夾,然后再文件夾下創(chuàng)建于個 scrpy 項目,這一步是后續(xù)所有代碼的起點。

> scrapy startproject my_scrapy
> New Scrapy project 'my_scrapy', using template directory 'e:\pythonproject\venv\lib\site-packages\scrapy\templates\project', created in:  # 一個新的 scrapy 項目被創(chuàng)建了,使用的模板是 XXX,創(chuàng)建的位置是 XXX
  E:\pythonProject\滾雪球?qū)WPython第4輪\my_scrapy
You can start your first spider with:  # 開啟你的第一個爬蟲程序
  cd my_scrapy   # 進入文件夾
  scrapy genspider example example.com # 使用項目命令創(chuàng)建爬蟲文件

上述內(nèi)容增加了一些注釋,可以比對著進行學(xué)習(xí),默認(rèn)生成的文件在 python 運行時目錄,如果想修改項目目錄,請使用如下格式命令:

scrapy startproject myproject [project_dir]

例如

scrapy startproject myproject d:/d1

命令依據(jù)模板創(chuàng)建出來的項目結(jié)構(gòu)如下所示,其中紅色下劃線的是項目目錄,而綠色下劃線才是 scrapy 項目,如果想要運行項目命令,則必須先進入紅色下劃線 my_scrapy 文件夾,在項目目錄中才能控制項目。

python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程

下面生成一個爬蟲文件

使用命令 scrapy genspider [-t template] <name> <domain> 生成爬蟲文件,該方式是一種快捷操作,也可以完全手動創(chuàng)建。創(chuàng)建的爬蟲文件會出現(xiàn)在 當(dāng)前目錄或者項目文件夾中的 spiders 文件夾中,name 是爬蟲名字,domain 用在爬蟲文件中的 alowed_domains 和 start_urls 數(shù)據(jù)中,[-t template] 表示可以選擇生成文件模板。

查看所有模板使用如下命令,默認(rèn)模板是 basic。

> scrapy genspider -l
basic
crawl
csvfeed
xmlfeed

創(chuàng)建第一個 scrapy 爬蟲文件,測試命令如下:

>scrapy genspider pm imspm.com
Created spider 'pm' using template 'basic' in module:
my_project.spiders.pm

此時在 spiders 文件夾中,出現(xiàn) pm.py 文件,該文件內(nèi)容如下所示:

import scrapy
class PmSpider(scrapy.Spider):
  name = 'pm'
  allowed_domains = ['imspm.com']
  start_urls = ['http://imspm.com/']

  def parse(self, response):
      pass

測試 scrapy 爬蟲運行

使用命令 scrapy crawl <spider>,spider 是上文生成的爬蟲文件名,出現(xiàn)如下內(nèi)容,表示爬蟲正確加載。

>scrapy crawl pm
2021-10-02 21:34:34 [scrapy.utils.log] INFO: Scrapy 2.5.0 started (bot: my_project)
[...]

 

scrapy 基本應(yīng)用

scrapy 工作流程非常簡單:

采集第一頁網(wǎng)頁源碼;解析第一頁源碼,并獲取下一頁鏈接;請求下一頁網(wǎng)頁源碼;解析源碼,并獲取下一頁源碼;[…]過程當(dāng)中,提取到目標(biāo)數(shù)據(jù)之后,就進行保存。

接下來為大家演示 scrapy 一個完整的案例應(yīng)用,作為 爬蟲 120 例 scrapy 部分的第一例。

> scrapy startproject my_project 爬蟲
> cd 爬蟲
> scrapy genspider pm imspm.com

獲得項目結(jié)構(gòu)如下:

python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程

上圖中一些文件的簡單說明。

scrapy.cfg:配置文件路徑與部署配置;

items.py:目標(biāo)數(shù)據(jù)的結(jié)構(gòu);

middlewares.py:中間件文件;

pipelines.py:管道文件;

settings.py:配置信息。

使用 scrapy crawl pm 運行爬蟲之后,所有輸出內(nèi)容與說明如下所示:

python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程

上述代碼請求次數(shù)為 7 次,原因是在 pm.py 文件中默認(rèn)沒有添加 www,如果增加該內(nèi)容之后,請求次數(shù)變?yōu)?4。

python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程

現(xiàn)在的 pm.py 文件代碼如下所示:

import scrapy
class PmSpider(scrapy.Spider):
  name = 'pm'
  allowed_domains = ['www.imspm.com']
  start_urls = ['http://www.imspm.com/']

  def parse(self, response):
      print(response.text)

其中的 parse 表示請求 start_urls 中的地址,獲取響應(yīng)之后的回調(diào)函數(shù),直接通過參數(shù) response 的 .text 屬性進行網(wǎng)頁源碼的輸出。

python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程

獲取到源碼之后,要對源碼進行解析與存儲

在存儲之前,需要手動定義一個數(shù)據(jù)結(jié)構(gòu),該內(nèi)容在 items.py 文件實現(xiàn),對代碼中的類名進行了修改,MyProjectItem → ArticleItem。

import scrapy

class ArticleItem(scrapy.Item):
  # define the fields for your item here like:
  # name = scrapy.Field()
 # 文章標(biāo)題
  url = scrapy.Field()  # 文章地址
  author = scrapy.Field()  # 作者

修改 pm.py 文件中的 parse 函數(shù),增加網(wǎng)頁解析相關(guān)操作,該操作類似 pyquery 知識點,直接觀察代碼即可掌握。

  def parse(self, response):
      # print(response.text)
      list_item = response.css('.list-item-default')
      # print(list_item)
      for item in list_item:
 # 直接獲取文本
          url = item.css('.a_block::attr(href)').extract_first() # 獲取屬性值
          author = item.css('.author::text').extract_first()  # 直接獲取文本
          print(title, url, author)

其中 response.css 方法返回的是一個選擇器列表,可以迭代該列表,然后對其中的對象調(diào)用 css 方法。

item.css('.title::text'),獲取標(biāo)簽內(nèi)文本;

item.css('.a_block::attr(href)'),獲取標(biāo)簽屬性值;

extract_first():解析列表第一項;extract():獲取列表。

在 pm.py 中導(dǎo)入 items.py 中的 ArticleItem 類,然后按照下述代碼進行修改:

  def parse(self, response):
      # print(response.text)
      list_item = response.css('.list-item-default')
      # print(list_item)
      for i in list_item:
          item = ArticleItem()
 # 直接獲取文本
          url = i.css('.a_block::attr(href)').extract_first()  # 獲取屬性值
          author = i.css('.author::text').extract_first()  # 直接獲取文本
          # print(title, url, author)
          # 對 item 進行賦值
          item['title'] = title
          item['url'] = url
          item['author'] = author
          yield item

此時在運行 scrapy 爬蟲,就會出現(xiàn)如下提示信息。

python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程

此時完成了一個單頁爬蟲

接下來對 parse 函數(shù)再次改造,使其在解析完第 1 頁之后,可以解析第 2 頁數(shù)據(jù)。

  def parse(self, response):
      # print(response.text)
      list_item = response.css('.list-item-default')
      # print(list_item)
      for i in list_item:
          item = ArticleItem()
 # 直接獲取文本
          url = i.css('.a_block::attr(href)').extract_first()  # 獲取屬性值
          author = i.css('.author::text').extract_first()  # 直接獲取文本
          # print(title, url, author)
          # 對 item 進行賦值
          item['title'] = title
          item['url'] = url
          item['author'] = author
          yield item
      next = response.css('.nav a:nth-last-child(2)::attr(href)').extract_first()  # 獲取下一頁鏈接
      # print(next)
      # 再次生成一個請求
      yield scrapy.Request(url=next, callback=self.parse)

上述代碼中,變量 next 表示下一頁地址,通過 response.css 函數(shù)獲取鏈接,其中的 css 選擇器請重點學(xué)習(xí)。

yield scrapy.Request(url=next, callback=self.parse) 表示再次創(chuàng)建一個請求,并且該請求的回調(diào)函數(shù)是 parse 本身,代碼運行效果如下所示。

python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程

如果想要保存運行結(jié)果,運行下面的命令即可。

scrapy crawl pm -o pm.json

python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程

如果想要將每條數(shù)據(jù)存儲為單獨一行,使用如下命令即可 scrapy crawl pm -o pm.jl 。

python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程

生成的文件還支持 csv 、 xml、marchal、pickle ,可自行嘗試。

下面將數(shù)據(jù)管道利用起來
打開 pipelines.py 文件,修改類名 MyProjectPipeline → TitlePipeline,然后編入如下代碼:

class TitlePipeline:
  def process_item(self, item, spider):  # 移除標(biāo)題中的空格
      if item["title"]:
          item["title"] = item["title"].strip()
          return item
      else:
          return DropItem("異常數(shù)據(jù)")

該代碼用于移除標(biāo)題中的左右空格。

編寫完畢,需要在 settings.py 文件中開啟 ITEM_PIPELINES 配置。

ITEM_PIPELINES = {
 'my_project.pipelines.TitlePipeline': 300,
}

300 是 PIPELINES 運行的優(yōu)先級順序,根據(jù)需要修改即可。再次運行爬蟲代碼,會發(fā)現(xiàn)標(biāo)題的左右空格已經(jīng)被移除。

到此 scrapy 的一個基本爬蟲已經(jīng)編寫完畢。

以上就是python爬蟲框架Scrapy基本應(yīng)用學(xué)習(xí)教程的詳細(xì)內(nèi)容,更多關(guān)于python爬蟲框架Scrapy的資料請關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://blog.csdn.net/hihell/article/details/120899494

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91porn在线观看国产 | 亚洲国产情侣偷自在线二页 | 九九99在线视频 | 草榴色导航| 麻豆网站在线观看 | 国产成人久久久精品一区二区三区 | 日韩一区三区 | 男插女的下面免费视频夜色 | 猫咪免费人成网站在线观看入口 | sese在线| 成年美女黄网色大观看全 | 国产欧美成人免费观看 | beeg日本高清xxxx18 | 91免费精品国自产拍在线可以看 | daring国家队在线观看樱花动漫 | 无遮挡h肉动漫高清在线 | 国产精品高清视亚洲一区二区 | 天堂网站天堂小说 | 草莓视频在线免费观看 | 天天爽天天 | 四虎永久在线精品国产馆v视影院 | 亚洲精品国产精品国自产观看 | 久久久精品成人免费看 | av在线亚洲男人的天堂 | 小小水蜜桃3视频在线观看 小鸟酱喷水 | 91国语精品自产拍在线观看一 | 亚洲美洲国产日产 | 视频一区二区在线 | 数学老师扒开腿让我爽快 | 国产成人综合网亚洲欧美在线 | 日韩免费一级片 | 欧美成人tv在线观看免费 | 亚洲一区二区日韩欧美gif | 亚洲AV午夜福利精品香蕉麻豆 | 高清国产在线 | 火影小南被爆羞羞网站 | 歪歪视频在线播放无遮挡 | 湿好紧太硬了我太爽了 | 青青草99久久精品国产综合 | 色视频亚洲 | 我的男友是消防员在线观看 |