【百度雲搜索,搜各種資料:http://www.bdyss.cn】
【搜網盤,搜各種資料:http://www.swpan.cn】
用命令創建自動爬蟲文件
創建爬蟲文件是根據scrapy的母版來創建爬蟲文件的
scrapy genspider -l 查看scrapy創建爬蟲文件可用的母版
Available templates:母版說明
basic 創建基礎爬蟲文件
crawl 創建自動爬蟲文件
csvfeed 創建爬取csv數據爬蟲文件
xmlfeed 創建爬取xml數據爬蟲文件
創建一個基礎母版爬蟲,其他同理
scrapy genspider -t 母版名稱 爬蟲文件名稱 要爬取的域名 創建一個基礎母版爬蟲,其他同理
如:scrapy genspider -t crawl lagou www.lagou.com
第一步,配置items.py接收數據字段
default_output_processor = TakeFirst()默認利用ItemLoader類,加載items容器類填充數據,是列表類型,可以通過TakeFirst()方法,獲取到列表裏的內容
input_processor = MapCompose(預處理函數)設置數據字段的預處理函數,可以是多個函數
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html
#items.py,文件是專門用於,接收爬蟲獲取到的數據信息的,就相當於是容器文件
import scrapy
from scrapy.loader.processors import MapCompose,TakeFirst
from scrapy.loader import ItemLoader #導入ItemLoader類也就加載items容器類填充數據
class LagouItemLoader(ItemLoader): #自定義Loader繼承ItemLoader類,在爬蟲頁面調用這個類填充數據到Item類
default_output_processor = TakeFirst() #默認利用ItemLoader類,加載items容器類填充數據,是列表類型,可以通過TakeFirst()方法,獲取到列表裏的內容
def tianjia(value): #自定義數據預處理函數
return '叫賣錄音網'+value #將處理後的數據返給Item
class LagouItem(scrapy.Item): #設置爬蟲獲取到的信息容器類
title = scrapy.Field( #接收爬蟲獲取到的title信息
input_processor = MapCompose(tianjia), #將數據預處理函數名稱傳入MapCompose方法裏處理,數據預處理函數的形式參數value會自動接收字段title
)
第二步,編寫自動爬蟲與利用ItemLoader類加載items容器類填充數據
自動爬蟲
Rule()設置爬蟲規則
參數:
LinkExtractor()設置url規則
callback='回調函數名稱'
follow=True 表示在抓取頁面繼續深入
LinkExtractor()對爬蟲獲取到的url做規則判斷處理
參數:
allow= r'jobs/' 是一個正則表達式,表示符合這個url格式的,才提取
deny= r'jobs/' 是一個正則表達式,表示符合這個url格式的,不提取拋棄掉,與allow相反
allow_domains= www.lagou.com/ 表示這個域名下的連接才提取
deny_domains= www.lagou.com/ 表示這個域名下的連接不提取拋棄
restrict_xpaths= xpath表達式 表示可以用xpath表達式限定爬蟲只提取一個頁面指定區域的URL
restrict_css= css選擇器,表示可以用css選擇器限定爬蟲只提取一個頁面指定區域的URL
tags= 'a' 表示爬蟲通過a標籤去尋找url,默認已經設置,默認即可
attrs= 'href' 表示獲取到a標籤的href屬性,默認已經設置,默認即可
- *
利用自定義Loader類繼承ItemLoader類,加載items容器類填充數據
*ItemLoader()實例化一個ItemLoader對象來加載items容器類,填充數據,如果是自定義Loader繼承的ItemLoader同樣的用法
參數:
第一個參數:要填充數據的items容器類注意加上括號,
第二個參數:response*
ItemLoader對象下的方法:
add_xpath('字段名稱','xpath表達式')方法,用xpath表達式獲取數據填充到指定字段
add_css('字段名稱','css選擇器')方法,用css選擇器獲取數據填充到指定字段
add_value('字段名稱',字符串內容)方法,將指定字符串數據填充到指定字段
load_item()方法無參,將所有數據生成,load_item()方法被yield後數據被填充items容器指定類的各個字段
爬蟲文件
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from adc.items import LagouItem,LagouItemLoader #導入items容器類,和ItemLoader類
class LagouSpider(CrawlSpider): #創建爬蟲類
name = 'lagou' #爬蟲名稱
allowed_domains = ['www.luyin.org'] #起始域名
start_urls = ['http://www.luyin.org/'] #起始url
rules = (
#配置抓取列表頁規則
Rule(LinkExtractor(allow=('ggwa/.*')), follow=True),
#配置抓取內容頁規則
Rule(LinkExtractor(allow=('post/\d+.html.*')), callback='parse_job', follow=True),
)
def parse_job(self, response): #回調函數,注意:因爲CrawlS模板的源碼創建了parse回調函數,所以切記我們不能創建parse名稱的函數
#利用ItemLoader類,加載items容器類填充數據
item_loader = LagouItemLoader(LagouItem(), response=response)
item_loader.add_xpath('title','/html/head/title/text()')
article_item = item_loader.load_item()
yield article_item
items.py文件與爬蟲文件的原理圖
【轉載自:http://www.lqkweb.com】