标签:
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 | 管道对象 |
标签:
原文地址:http://www.cnblogs.com/xxdfly/p/4203128.html