2013-06-18 39 views
5

Tôi chỉ mới bắt đầu hiểu biết rõ ràng. Bây giờ tôi đang cố gắng thu thập dữ liệu bằng cách làm theo hướng dẫn. Nhưng tôi gặp khó khăn khi thu thập dữ liệu văn bản từ div.scrapy - cách lấy văn bản từ 'div'

Đây là items.py

from scrapy.item import Item, Fied 
class DmozItem(Item): 
    name = Field() 
    title = Field() 
    pass 

Đây là dmoz_spider.py

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from scrapy.item import Item 

from dmoz.items import DmozItem 

class DmozSpider(BaseSpider): 
    name = "dmoz" 
    allowed_domains = ["roxie.com"] 
    start_urls = ["http://www.roxie.com/events/details.cfm?eventID=4921702B-9E3D-8678-50D614177545A594"] 

    def parse(self, response): 
      hxs = HtmlXPathSelector(response) 
      sites = hxs.select('//div[@id="eventdescription"]') 
      items = [] 
      for site in sites: 
        item = DmozItem() 
        item['name'] = hxs.select("text()").extract() 
        items.append(item) 
      return items 

Và bây giờ tôi đang cố gắng để thu thập thông từ thư mục hàng đầu bởi chỉ huy này:

scrapy crawl dmoz -o scraped_data.json -t json 

Nhưng tệp được tạo chỉ với '['.

Nó hoạt động hoàn hảo trong bảng điều khiển (bằng cách chỉ huy từng lựa chọn), nhưng bằng cách nào đó nó không hoạt động như một tập lệnh. Tôi thực sự là một starter của scrapy. Các bạn có thể cho tôi biết làm thế nào tôi có thể lấy dữ liệu trong 'div' không? Cảm ơn trước.

* Ngoài ra, đây là những gì tôi nhận được.

2013-06-19 08:43:56-0700 [scrapy] INFO: Scrapy 0.16.5 started (bot: dmoz) 
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/twisted/web/microdom.py:181: SyntaxWarning: assertion is always true, perhaps remove parentheses? 
assert (oldChild.parentNode is self, 
2013-06-19 08:43:56-0700 [scrapy] DEBUG: Enabled extensions: FeedExporter, LogStats, TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState 
2013-06-19 08:43:56-0700 [scrapy] DEBUG: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, RedirectMiddleware, CookiesMiddleware, HttpCompressionMiddleware, ChunkedTransferMiddleware, DownloaderStats 
2013-06-19 08:43:56-0700 [scrapy] DEBUG: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware 
2013-06-19 08:43:56-0700 [scrapy] DEBUG: Enabled item pipelines: 
2013-06-19 08:43:56-0700 [dmoz] INFO: Spider opened 
2013-06-19 08:43:56-0700 [dmoz] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2013-06-19 08:43:56-0700 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6023 
2013-06-19 08:43:56-0700 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080 
2013-06-19 08:43:56-0700 [dmoz] DEBUG: Crawled (200) <GET http://www.roxie.com/events/details.cfm?eventID=4921702B-9E3D-8678-50D614177545A594> (referer: None) 
2013-06-19 08:43:56-0700 [dmoz] INFO: Closing spider (finished) 
2013-06-19 08:43:56-0700 [dmoz] INFO: Dumping Scrapy stats: 
{'downloader/request_bytes': 281, 
'downloader/request_count': 1, 
'downloader/request_method_count/GET': 1, 
'downloader/response_bytes': 27451, 
'downloader/response_count': 1, 
'downloader/response_status_count/200': 1, 
'finish_reason': 'finished', 
'finish_time': datetime.datetime(2013, 6, 19, 15, 43, 56, 569164), 
'log_count/DEBUG': 7, 
'log_count/INFO': 4, 
'response_received_count': 1, 
'scheduler/dequeued': 1, 
'scheduler/dequeued/memory': 1, 
'scheduler/enqueued': 1, 
'scheduler/enqueued/memory': 1, 
'start_time': datetime.datetime(2013, 6, 19, 15, 43, 56, 417661)} 
2013-06-19 08:43:56-0700 [dmoz] INFO: Spider closed (finished) 
+0

Chỉ cần kiểm tra xem bạn muốn điền tên trường chính xác vào trường nào? "DOC FEST: MY WAY TO OLYMPIA" hay cái gì khác? – Talvalin

+0

Có, tôi cũng muốn có được mô tả của phim và tập tin img. Bạn có thể cho tôi biết những gì tôi đã bỏ lỡ không? – user2499003

Trả lời

6

Tôi có thể lấy cho bạn tựa đề của bộ phim, nhưng tôi hơi rối rắm với XPath nên mô tả XPath sẽ giúp bạn mọi thứ trong phần tử <div class="tabbertab" title="Synopsis">. Nó không phải lý tưởng, nhưng đó là một điểm khởi đầu. Lấy URL hình ảnh được để lại dưới dạng bài tập cho OP. :)

from scrapy.item import Item, Fied 
class DmozItem(Item): 
    title = Field() 
    description = Field() 
    pass 

class DmozSpider(BaseSpider): 
    name = "test" 
    allowed_domains = ["roxie.com"] 
    start_urls = ["http://www.roxie.com/events/details.cfm?eventID=4921702B-9E3D-8678-50D614177545A594"] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     item = DmozItem() 
     item['title'] = hxs.select('//div[@style="width: 100%;"]/text()').extract() 
     item['description'] = hxs.select('//div[@class="tabbertab"]').extract() 
     return item 
+2

Nó chắc chắn hoạt động! Cảm ơn Talvalin. Do sự giúp đỡ của bạn, tôi có thể thu thập thông tin tất cả các thông tin khác mà tôi muốn! – user2499003

+0

Rất tốt để nghe. Vâng, nếu cả hai câu trả lời đều hữu ích, thì hãy chọn câu trả lời hữu ích nhất làm câu trả lời được chấp nhận và upvote cả hai. :) – Talvalin

2

Chỉ cần thay thế

item['name'] = hxs.select("text()").extract() 

với

item['name'] = site.select("text()").extract() 

Hy vọng rằng sẽ giúp.

+0

Ồ, tôi đã thử nó, nhưng nó không hoạt động. Nó vẫn làm cho tệp JSON chỉ chứa '['. – user2499003

+0

Ok, tôi đã chỉnh sửa câu trả lời (đã xóa [0]) - để có danh sách trong giá trị tên json đầu ra. – alecxe

+1

Yei! Đó là vấn đề con đường. Cảm ơn alecxe! Bởi vì bình luận của bạn rằng nó làm việc cho tôi, tôi bắt đầu tất cả các tác phẩm ở con đường khác nhau, và nó hoạt động. – user2499003