Scrapy入門例項(使用Scrapy抓取豆瓣電影top250榜單)
專案地址:https://github.com/yuanfuzhi/ScrapyDemo.git
一 Scrapy介紹與安裝
1, Scrapy介紹
Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。可以應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式中。其最初是為了
頁面抓取 (更確切來說, 網路抓取 )所設計的,也可以應用在獲取API所返回的資料(例如 Amazon Associates Web Services ) 或者通用的網路爬蟲。
2, Scrapy安裝
①使用pip安裝
pip install scrapy
網上有很多安裝Scrapy的教程,這裡不多解釋,但不推薦這種安裝方式,因為Scrapy依賴一些包,如果你的電腦上沒有的話,使用pip安裝會出現問題,比較麻煩。推薦使用下面的安裝方式
②使用Anaconda安裝scrapy
Anaconda是一個開源的包、環境管理神器,不多解釋,先從官網下載安裝Anaconda,然後傻瓜式點next安裝,裝好之後開啟命令列,輸入conda install scrapy,然後根據提示按Y,就會將Scrapy及其依賴的包全部下載下來,十分好用。
測試scrapy是否安裝成功:在dos視窗輸入scrapy回車
另外附上Anaconda常用指令:https://www.cnblogs.com/yfz1552800131/p/9796503.html
3, Scrapy專案結構
scrapy.cfg: 專案配置檔案。
settings.py: 該檔案定義了一些設定,如使用者代理,爬取延時等(詳見: https://doc.scrapy.org/en/latest/topics/settings.html)。
items.py: 該檔案定義了待抓取域的模型(詳見: http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/tutorial.html#item)。
pipelines.py: 該檔案定義了資料的儲存方式(處理要抓取的域),可以是檔案,資料庫或者其他(詳見: http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/item-pipeline.html
middlewares.py: 爬蟲中介軟體,該檔案可定義隨機切換ip或者使用者代理的函式(詳見: http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/spider-middleware.html)。
spiders: 該目錄下儲存實際的爬蟲程式碼(詳見: http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/spiders.html)。
二,Scrapy專案實戰
①新建專案:使用pycharm工具在終端中輸入:scrapy startproject douban 新建一個爬蟲專案,然後cd douban 進入專案根目錄
然後在終端輸入命令:scrapy genspider douban_spider movie.douban.com生成douban_spider.py爬蟲檔案
②明確目標
入口URL:https://movie.douban.com/top250
抓取top250電影的序列號,電影名,介紹,星級,評價數,電影描述選項,在items.py檔案中定義抓取的資料項:
③製作爬蟲
在douban_spider.py爬蟲檔案編寫具體的邏輯程式碼:
# -*- coding: utf-8 -*- import scrapy from ..items import DoubanItem class DoubanSpiderSpider(scrapy.Spider): name = 'douban_spider' # 允許的域名 allowed_domains = ['movie.douban.com'] # 入口URL start_urls = ['https://movie.douban.com/top250'] def parse(self, response): movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li") #迴圈電影的條目 for i_item in movie_list: #匯入item,進行資料解析 douban_item = DoubanItem() douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first() douban_item['movie_name'] = i_item.xpath(".//div[@class='info']//div[@class='hd']/a/span[1]/text()").extract_first() #如果檔案有多行進行解析 content = i_item.xpath(".//div[@class='info']//div[@class='bd']/p[1]/text()").extract() for i_content in content: content_s ="".join( i_content.split()) douban_item['introduce'] = content_s douban_item['star'] = i_item.xpath(".//span[@class='rating_num']/text()").extract_first() douban_item['evaluate'] = i_item.xpath(".//div[@class='star']//span[4]/text()").extract_first() douban_item['describe'] = i_item.xpath(".//p[@class='quote']/span/text()").extract_first() print(douban_item) yield douban_item #解析下一頁,取後一頁的XPATH next_link = response.xpath("//span[@class='next']/link/@href").extract() if next_link: next_link = next_link[0] yield scrapy.Request("https://movie.douban.com/top250"+next_link,callback=self.parse)View Code
④儲存內容
1,儲存成json或csv格式的檔案
在命令列輸入:scrapy crawl douban_spider -o test.json 或者
scrapy crawl douban_spider -o test.csv,將爬取到的資料存到json檔案或者csv檔案裡
2,儲存到Mysql資料庫
首先下載pymysql庫:conda install pymysql
然後建好對應的資料庫,資料表:
在專案settings檔案中新增與資料庫連線相關的變數
連線資料庫,獲取cursor以便之後對資料就行增刪查改
資料插入邏輯:
執行專案: scrapy crawl douban_spider