2013-07-02 12 views
7

Cạo dữ liệu từ một bảng có nhiều mảnh vụn. Html bảng cũng giống như:Cắt bỏ dữ liệu từ một bảng có giấy vụn

<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> 

Toàn bộ danh sách là avialable bởi

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

Làm thế nào bạn sẽ chia cho từng mục và sau đó gán dữ liệu TD1 - td5ta

Trả lời

10

Không chắc chính xác những gì làm bạn muốn xem trong các mục của bạn, nhưng đây là một ví dụ và tôi hy vọng điều này là:

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 

Hy vọng thứ giúp.

+0

làm thế nào bạn sẽ tiếp cận nhiều hàng và colums – bobsr

+0

Điều đó phụ thuộc. Xin vui lòng, cho thấy những gì bạn muốn xem trong đầu ra (mục) đầu tiên. – alecxe

+0

nó hoạt động .. cảm ơn .. cố gắng trích xuất từng mục bây giờ .. có một hàng – bobsr

0

Khi bạn nói "chia chúng thành từng mục", bạn có nghĩa là mỗi lớp/hàng?

Dù sao đi nữa, cách tôi thực hiện chỉ đơn giản là sử dụng cụm từ thông dụng.

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

Nếu bạn muốn chia nó lên bằng cách liên tiếp, sau đó:

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

Anh ấy hỏi làm thế nào để làm điều đó bằng cách sử dụng Scrapy. Plus, về cơ bản, phân tích cú pháp html bằng cách sử dụng regex không phải là một ý tưởng tốt. – alecxe

+0

Đủ công bằng, không chắc chắn, tôi nghĩ rằng tôi sẽ cung cấp một giải pháp dù sao. – JonLeslieHarding