码迷,mamicode.com
首页 > 其他好文 > 详细

Spider实例详解

时间:2015-01-05 14:27:47      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

  1 # -*- coding: utf-8 -*-
  2 
  3 import scrapy
  4 from scrapy import Spider, Request, log
  5 from scrapy.selector import Selector
  6 import sys
  7 sys.path.append(/home/administrator/Scrapy_Develop/tkdata)
  8 from tkspider import TKdataSpider
  9 from tkitems import TotalItem, InvestItem, TenderItem, RepaymentItem
 10 from dict import *
 11 from method import *
 12 
 13 class JJJCSpider(TKdataSpider):
 14     name = jiajiajucai
 15     allowed_domains = [jiajiajucai.com]
 16     start_urls = [http://www.jiajiajucai.com]
 17 
 18     # 标的列表页数
 19     page = 0
 20     # 标的列表url
 21     list_url = http://www.jiajiajucai.com/invest/index.html?p=%d
 22 
 23     # 解析函数
 24     def parse(self, response):
 25         # 解析平台总数据
 26         item = self.parse_total(response)
 27 
 28         # 爬取标的列表
 29         yield Request(self.list_url % self.page, callback=self.parse_list)
 30 
 31 
 32     # 解析平台总数据
 33     def parse_total(self, response):
 34         # 解析数据
 35         sel = Selector(response)
 36         item = TotalItem()
 37         item = self.total(sel, xpaths_total)
 38 
 39         # 处理解析到的数据
 40         item[total] = total(item[total])
 41         item[dueln] = dueln(item[dueln])
 42         item[lncome] = lncome(item[lncome])
 43         item[rate] = rate(item[rate])
 44         item[person] = person(item[person])
 45         return item
 46     
 47 
 48     # 解析标的列表
 49     def parse_list(self, response):
 50         # 解析标的列表
 51         sel = Selector(response)
 52     xpath_str = //div[@id="con"]/div/table/tr/td/a[@class="BL_name"]/@href
 53         sel_list = sel.xpath(xpath_str)
 54         url_list = self.list(sel_list)
 55 
 56         # 请求标的
 57         for url in url_list[0:2]:
 58             self.log(u请求标的页:%s % url)
 59             yield Request(url, callback=self.parse_page)
 60             
 61         # 递归获取所有标的列表
 62         """
 63         if len(url_list) > 0:
 64             self.page += 1
 65             yield Request(self.list_url % self.page, callback=self.parse_list)
 66         """
 67 
 68     # 解析标的网页
 69     def parse_page(self, response):
 70         # 标的信息
 71         item = self.parse_invest(response)
 72 
 73         # 投资人列表
 74         item = self.parse_tender(response)
 75         
 76         # 还记录列表
 77         item = self.parse_repayment(response)
 78         self.log(‘‘)
 79         self.log(‘‘)
 80 
 81 
 82     # 解析标的信息
 83     def parse_invest(self, response):
 84         # 解析数据
 85         sel = Selector(response)
 86         item = InvestItem()
 87         item = self.invest(sel, xpaths_invest)
 88 
 89         # 处理解析到的数据
 90         item[num] = i_num(item[num])
 91     item[title] = i_title(item[title])
 92         item[type] = i_type(item[type])
 93         item[balance] = i_balance(item[balance])
 94         item[rate] = i_rate(item[rate])
 95         item[award_rate] = i_award_rate(item[award_rate])
 96         item[dead] = i_dead(item[dead])
 97         item[r_type] = i_r_type(item[r_type])
 98         item[man] = i_man(item[man])
 99         return item
100 
101 
102     # 解析投标记录信息
103     def parse_tender(self, response):
104         # 解析数据
105         sel = Selector(response)
106         sel_tender = sel.xpath(//div[@class="wrap"]/table[5]/tr/td/table/tr[3]/td/table/tbody/tr)
107         item_list = self.tender(sel_tender, xpaths_tender)
108 
109         # 处理解析到的数据
110         tender_list = []
111         for item in item_list:
112             item[man] = t_man(item[man])
113             item[balance] = t_balance(item[balance])
114             item[type] = t_type(item[type])
115             item[time] = t_time(item[time])
116             tender_list.append(item)
117         return tender_list
118 
119 
120     # 解析还款记录
121     def parse_repayment(self, response):
122         # 解析数据
123         sel = Selector(response)
124         sel_repayment = sel.xpath(//dl[@class="repay"]/dt)[1:]
125         item_list = self.repayment(sel_repayment, xpaths_repayment)
126 
127         # 处理解析到的数据
128         repayment_list = []
129         for item in item_list:
130             item[date] = r_date(item[date])
131             item[status] = r_status(item[status])
132             item[done] = r_done(item[done])
133             item[undone] = r_undone(item[undone])
134             item[day] = r_day(item[day])
135             repayment_list.append(item)
136         return repayment_list
name 命名Spider的名称
allowed_domains 搜索的域名范围,即爬虫的约束区域,规定爬虫只爬取这个域名下的网页
start_urls 爬虫抓取网页的起始点,可包含多个url
parse

parse方法是spider抓到一个网页以后默认调用的callback,避免使用这个名字来定义自己的方法。

当spider拿到url的内容以后,会调用parse方法,并且传递一个response参数给它,response包含了抓到的网页的内容,在parse方法里,可以从抓到的网页里面解析数据。

此 实例中它返回了一个Request列表,scrapy自动的根据这个列表抓取网页,每当抓到一个网页,就会调用 parse_list,parse_list也会返回一个Request列表,scrapy又会根据这个列表去抓网页,并且抓到后调用 parse_page,实现对页面内容的解析

item 管道对象

Spider实例详解

标签:

原文地址:http://www.cnblogs.com/xxdfly/p/4203128.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!