2015-01-16 66 views
1

我想從網站上刮取數據:http://www.consumercomplaints.in/?search=ecom-express# 我希望我的請求對於那些經驗豐富的Scrapy用戶來說非常簡單直接。scrapy - 刮下一頁上的字段,然後返回到舊頁面

問題:我試圖抓取每個review.By的數據,**我的意思是主標題,副標題,用戶名,日期和審查。 **但是我無法得到評論,因爲我想要查看的內容是轉到嵌入主標題的鏈接,然後在第一頁上獲取整個評論而不是簡短的評論,然後爲每個評論做這件事。

我的蜘蛛類:

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.spider import BaseSpider 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from consumercomplaint.items import ConsumercomplaintItem 

class MySpider(BaseSpider): 
    name = "consumer" 
    allowed_domains = ["http://www.consumercomplaints.in"] 
    start_urls = ["http://www.consumercomplaints.in/?search=ecom-express&page=11"] 

def parse(self, response): 
    hxs = HtmlXPathSelector(response) 
    titles = hxs.select('//table[@width="100%"]') 
    print titles 
    items = [] 
    del(titles[0]) 
    for i in titles: 
     item = ConsumercomplaintItem() 
     item ["maintitle"] = i.select('.//a[1]//text()').extract() 
     item ["username"] = i.select('.//td[@class="small"]//a[2]/text()').extract() 
     item["date"]=i.select('.//td[@class="small"]/text()').extract() 
     item["subtitle"]=i.select('.//td[@class="compl-text"]/div/b[1]/text()').extract() 
     item["complaint"]=i.select('.//td[@class="compl-text"]/div/text()').extract() 
     items.append(item) 
    return items 

我的物品類別:

from scrapy.item import Item, Field 

class ConsumercomplaintItem(Item): 
    maintitle = Field() 
    username = Field() 
    date = Field() 
    subtitle = Field() 
    complaint = Field() 
+0

我在硒做到了這一點 - 如果你願意嘗試Selenium,只需給予一個提示 – duhaime

回答

1

我會做兩個階段:

  1. 一)部分數據保存到項目 B)提取完整投訴的鏈接 c)創建一個新的請求並將您的項目保存到request.meta d)產量要求
  2. 一)提取完整的投訴 二)提取元 C項目)保存投訴到項目的實地 d)獲得項目

    def parse(self, response): 
    hxs = HtmlXPathSelector(response) 
    titles = hxs.select('//table[@width="100%"]') 
    print titles 
    items = [] 
    del(titles[0]) 
    for i in titles: 
        item = ConsumercomplaintItem() 
        item ["maintitle"] = i.select('.//a[1]//text()').extract() 
        item ["username"] = i.select('.//td[@class="small"]//a[2]/text()').extract() 
        item["date"]=i.select('.//td[@class="small"]/text()').extract() 
        item["subtitle"]=i.select('.//td[@class="compl-text"]/div/b[1]/text()').extract() 
    
        complaint_link = row.xpath('//complaint/link/a/@href').extract_first() 
        complaint_page = response.urljoin(complaint_link) 
        request = scrapy.Request(cve_page, callback=self.parse_complaint) 
        request.meta['item'] = item 
        yield request 
    
    def parse_complaint(self, response): 
        item = response.meta['item'] 
        item['complaint'] = response.xpath('/complaint/path/text()').extract_first() 
        yield item