使用Scrapy進行Python網頁抓取


在這篇文章中,我們將學習如何使用Python中可用的Scrapy模組進行網頁抓取技術。

什麼是網頁抓取?

網頁抓取用於藉助爬蟲/掃描器從網站獲取/獲取資料。對於那些不提供API功能的網頁,網頁抓取非常方便地提取資料。在Python中,可以使用Beautiful Soup、Scrapy和lxml等各種模組進行網頁抓取。

在這裡,我們將討論使用Scrapy模組進行網頁抓取。

為此,我們首先需要**安裝Scrapy**。

在終端或命令提示符中輸入

>>> pip install Scrapy

由於**Scrapy**是一個框架,我們需要執行一個初始化命令

>>> scrapy startproject tutpts

在這裡,我們建立一個**網頁爬蟲**來從網站提取資料。

為了構建爬蟲,我們建立一個名為**tutptscraw.py**的單獨指令碼。在這裡,我們宣告一個用於提取內容的類。在這裡,我們命名網頁爬蟲,並使用.requests從給定的URL獲取資料。

使用生成器函式,它會產生獲取的資料。

示例

import scrapy
class ExtractUrls(scrapy.Spider):
   name = "fetch"
   # generator Function
   def start_requests(self):
      # enter the URL
      urls = ['https://tutorialspoint.tw/index.htm/', ]
      for url in urls:
      yield scrapy.Request(url = url, callback = self.parse)

這裡,使用request函式獲取封裝在錨標記中的所有資料。由於scrapy是一個小型框架,我們在scrapy shell中執行所有功能。

要啟用scrap shell,我們使用以下命令

scrapy shell https://tutorialspoint.tw/index.htm/

現在,我們使用選擇器(即CSS或xpath)從錨標記獲取資料。

response.css('a')
links = response.css('a').extract()

為了獲取網頁上所有可用的連結,我們建立一個parse方法。Scrapy內部會繞過之前訪問過的URL,從而減少顯示結果時的渲染時間。

import scrapy
class ExtractUrls(scrapy.Spider):
   name = "fetch"
   # generator Function
   def start_requests(self):
      # enter the URL
      urls = ['https://tutorialspoint.tw/index.htm/', ]
      for url in urls:
      yield scrapy.Request(url = url, callback = self.parse)
   # Parse function
   def parse(self, response):
   title = response.css('title::text').extract_first()
   # Get anchor tags
   links = response.css('a::attr(href)').extract()
   for link in links:
      yield
   {
      'title': title,
      'links': link
   }
   if 'tutorialspoint' in link:
   yield scrapy.Request(url = link, callback = self.parse)

結論

在本教程中,我們學習瞭如何在Python中使用Scrapy模組實現網頁爬蟲。

更新於:2019年9月25日

瀏覽量:157

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.