2013-07-02 9 views
7

स्केपर के साथ एक तालिका से स्क्रैप डेटा। तालिका एचटीएमएल की तरह है:स्केपर के साथ एक तालिका से स्क्रैप डेटा

<table class="tablehd"> 

<tr class="colhead"> 
<td width="170">MON, NOV 11</td> 
<td width="80">Item</td> 
<td width="60" align="center"></td> 
<td width="210">Item</td> 
<td width="220">Item</td> 
</tr> 

<tr class="oddrow"> 
<td> Item </a></td> 
<td> Item </td> 
<td align="center"> Item </td> 
<td></td> 
<td> Item </td> 
</tr> 

<tr class="evenrow"> 
<td> Item </a></td> 
<td> Item </td> 
<td align="center"> Item </td> 
<td></td> 
<td> Item </td> 
</tr> 


</table> 

पूरी सूची

items = hxs.select('//table[@class="tablehd"]//td//text()').extract() 

आप उन्हें कैसे प्रत्येक आइटम के लिए विभाजित है और फिर डेटा TD1 आवंटित द्वारा ही उपलब्ध है - td5ta

उत्तर

10

सुनिश्चित नहीं हैं कि वास्तव में आप करते क्या अपने आइटम में देखना चाहते हैं, लेकिन यहां एक उदाहरण है और मुझे आशा है कि यह यह है:

class MyItem(Item): 
    value = Field() 


class MySpider(BaseSpider): 
    ... 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     items = hxs.select('//table[@class="tablehd"]/td') 

     for item in items: 
      my_item = MyItem() 
      my_item['value'] = item.select('.//text()').extract() 
      yield my_item 

आशा है कि मदद करता है।

+0

कैसे आप एकाधिक पंक्तियों और colums – bobsr

+0

यह निर्भर करता है दृष्टिकोण होगा। कृपया, दिखाएं कि आप पहले आउटपुट (आइटम) में क्या देखना चाहते हैं। – alecxe

+0

यह काम करता है .. धन्यवाद .. अब प्रत्येक आइटम निकालने की कोशिश कर रहा है .. एक पंक्ति – bobsr

0

जब आप कहते हैं कि "उन्हें प्रत्येक आइटम में विभाजित करें" तो क्या आपका मतलब प्रत्येक वर्ग/पंक्ति है?

वैसे भी, जिस तरह से मैं इसे नियमित अभिव्यक्ति का उपयोग करना चाहता हूं।

import urllib, re 
html=urllib.urlopen('domain.com') 
itemfinder=re.compile('td>(.*)</td>') 
items=re.findall(itemfinder, html) 

आप पंक्ति द्वारा इसे विभाजित करने के लिए चाहते हैं, तो:

rowfinder=('tr', re.Multiline) 
rows=re.findall(rowfinder, html) 
for row in rows: 
    ...code above except substitute variables apropos 
+0

वह पूछ रहा है कि स्केपर का उपयोग करके इसे कैसे किया जाए। इसके अलावा, मूल रूप से, regex का उपयोग कर एचटीएमएल पार्सिंग एक अच्छा विचार नहीं है। – alecxe

+0

पर्याप्त मेला, यकीन नहीं था, मैंने सोचा कि मैं फिर भी एक समाधान प्रदान करता हूं। – JonLeslieHarding

संबंधित मुद्दे