項目地址: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)
④存儲內容
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

