您好,登錄后才能下訂單哦!
這篇“Scrapy使用案例分析”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Scrapy使用案例分析”文章吧。
scrapy是一個快速的高級web抓取和web抓取框架,用于抓取網站并從其頁面中提取結構化數據。它可以用于廣泛的用途,從數據挖掘到監控和自動化測試。
首先,確定你的電腦上已經安裝了 Python 3 以及對應的 pip。可以使用下面的命令查看:
$ python3 --version Python 3.6.3 $ pip3 --version pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)
如果沒有安裝的話,推薦使 Homebrew 這個工具來進行安裝。
pip 是 Python 的一個包管理工具,類似于 npm,可以在線安裝、卸載所有的第三方 Python 模塊,并自動處理依賴關系。這里我們使用下面的命令來安裝 Scrapy 模塊:
$ pip3 install scrapy
首先,我們使用下面的命令來創建并初始化 Scrapy 項目:
$ scrapy startproject doubanmovie
這樣便會在當前目錄下創建一個 doubanmovie 的爬蟲項目,其內部結構如下:
$ tree . ├── doubanmovie │ ├── __init__.py │ ├── __pycache__ │ ├── items.py │ ├── middlewares.py │ ├── pipelines.py │ ├── settings.py │ └── spiders │ ├── __init__.py │ └── __pycache__ └── scrapy.cfg
其中:
scrapy.cfg 為 Scrapy 項目的核心配置文件
items.py 用于定義爬蟲程序爬取到的數據實體的屬性結構
piplines.py 用于定義爬蟲程序每次爬取到的數據實體進行后續處理的操作流程,比如寫入文件系統或數據庫
settings.py 為爬蟲程序的配置文件,可以在這里定義多個 pipline 和 middleware
spiders 文件夾中存放爬蟲文件
接著,我們需要在 items.py 文件中定義電影實體的屬性結構:
class DoubanmovieItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() rank = scrapy.Field() # 豆瓣排名 title = scrapy.Field() # 電影名稱 poster = scrapy.Field() # 電影海報 link = scrapy.Field() # 鏈接地址 rating = scrapy.Field() # 豆瓣評分 pass
然后,我們使用下面的命令來創建一個名為 doubanspider 的爬蟲程序:
$ scrapy genspider moviespider douban.com
運行之后會在 spiders 目錄下生成一個名為 moviespider.py 的爬蟲文件,內部定義了爬蟲的名稱、作用域及起始 URL 等基本信息,以及一個解析函數,該函數的主要功能便是通過 XPath 分析頁面中的 HTML 元素,并將解析結果輸出:
class MoviespiderSpider(scrapy.Spider): name = 'moviespider' allowed_domains = ['douban.com'] start_urls = ['https://movie.douban.com/top250'] def parse(self, response): movie_items = response.xpath('//div[@class="item"]') for item in movie_items: movie = DoubanmovieItem() movie['rank'] = item.xpath('div[@class="pic"]/em/text()').extract() movie['title'] = item.xpath('div[@class="info"]/div[@class="hd"]/a/span[@class="title"][1]/text()').extract() movie['poster'] = item.xpath('div[@class="pic"]/a/img/@src').extract() movie['link'] = item.xpath('div[@class="info"]/div[@class="hd"]/a/@href').extract() movie['rating'] = item.xpath('div[@class="info"]/div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract() yield movie pass
通過爬蟲解析后的實體數據,會通過一種 Pipeline 的過程將結果進行打印輸出、存入文件或數據庫等:
class DoubanmoviePipeline(object): def process_item(self, item, spider): print('豆瓣排名:' + item['rank'][0]) print('電影名稱:' + item['title'][0]) print('鏈接地址:' + item['link'][0]) print('豆瓣評分:' + item['rating'][0] + '\n') return item
由于豆瓣電影的網站設置了防爬蟲技術,所以在完成上述步驟后運行爬蟲會出現 403 的 HTTP 狀態碼。于是我們需要在發送的請求中加入 User Agent 信息來偽裝成一個瀏覽器:
from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware class FakeUserAgentMiddleware(UserAgentMiddleware): def process_request(self, request, spider): request.headers.setdefault('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36')
最后,我們將上述修改寫入配置文件:
# Enable or disable downloader middlewares# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.htmlDOWNLOADER_MIDDLEWARES = { 'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None, 'doubanmovie.fakeuseragent.FakeUserAgentMiddleware': 543,}# Configure item pipelines# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.htmlITEM_PIPELINES = { 'doubanmovie.pipelines.DoubanmoviePipeline': 300,}
運行 scrapy crawl moviespider 命令,便會在控制臺中輸出爬取到的數據。
以上就是關于“Scrapy使用案例分析”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。