一、介紹
個人最近學習scrapy的一個練手項目,因爲是爬取靜態網頁比較簡單,不過還是基本熟悉了用scrapy進行爬蟲的流程。爬取的是豆瓣top250的電影名稱,導演,評分等。
二、代碼解析
首先創建初始爬蟲項目, cd到想保存的目錄,然後在命令行中輸入
$ scrapy startproject top250
然後我們開始更改item.py文件,代碼如下
import scrapy class Top250Item(scrapy.Item): movie_name = scrapy.Field() director = scrapy.Field() actor = scrapy.Field() type = scrapy.Field() score = scrapy.Field()
pipeline不用修改,但我們需要修改setting
BOT_NAME = 'top250' SPIDER_MODULES = ['top250.spiders'] NEWSPIDER_MODULE = 'top250.spiders' FEED_URI = './TOP250.csv' # 輸入保存的位置 FEED_FORMAT = 'csv' # 保存爲csv格式 USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' # 在google裏輸入‘what is my user agent’就可以找到
下面就要開始正式的工作了,我們在spiders文件夾下創建一個名爲mySpider.py的文件,然後輸入以下代碼
# -*- coding:utf-8 -*- from scrapy.spider import Spider from scrapy.http import Request from scrapy.selector import Selector from top250.items import Top250Item from scrapy.contrib.spiders import CrawlSpider, Rule from scrapy.linkextractors import LinkExtractor import re class mySpider(CrawlSpider): name = 'movies' # 爬蟲名 download_delay = 1 # 設置下載延遲 allowed_domains = ['movie.douban.com'] #允許爬取的主域名 start_urls =["https://movie.douban.com/top250"] #開始爬取的地址 rules = [Rule(LinkExtractor(allow=(r'https://movie.douban.com/top250\?start=\d+.*'))), Rule(LinkExtractor(allow=(r'https://movie.douban.com/subject/\d+')), callback='parse_item', follow=False)] #設置爬取的規則 def parse_item(self, response): #自定義網頁解析 sel = Selector(response) item = Top250Item() #利用xpath表達式來進行內容的提取,.加入encode('GBK')的作用是防止中文在csv中顯示爲亂碼。 item['movie_name'] = [m.encode('GBK') for m in sel.xpath('//*[@id="content"]/h1/span[1]/text()').extract()] item['director'] = [m.encode('GBK') for m in sel.xpath('//*[@id="info"]/span[1]/span[2]/a/text()').extract()] item['actor'] = [m.encode('GBK') for m in sel.xpath('//*[@id="info"]/span[3]/span[2]/a/text()').extract()] item['type'] = [m.encode('GBK') for m in sel.xpath('//*[@id="info"]/span[6]/text()').extract()] item['score'] = sel.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/strong/text()').extract() yield item
介紹一個chrome中很好用的工具,可以自動幫你寫出xpath表達式
。用法是將需要提取的元素拉黑選定,點擊右鍵,選擇‘檢查’,然後在相應的代碼位置點擊右鍵,選擇‘copy -> copy xpath’即可運行爬蟲
cd到項目的目錄,在命令行中輸入
scrapy crawl movies
最後爬取的效果如圖所示