2011-12-04 16 views
9

Tôi vừa mới cài đặt cào và theo dmoz đơn giản tutorial hoạt động. Tôi chỉ nhìn lên xử lý tập tin cơ bản cho python và cố gắng để có được trình thu thập thông tin để đọc một danh sách các URL từ một tập tin nhưng có một số lỗi. Điều này có lẽ sai nhưng tôi đã cho nó một shot. Có ai đó vui lòng chỉ cho tôi một ví dụ về việc đọc danh sách các URL bị lỗi? Cảm ơn trước.Đọc danh sách các URL từ tập tin để cạo không?

from scrapy.spider import BaseSpider 

class DmozSpider(BaseSpider): 
    name = "dmoz" 
    allowed_domains = ["dmoz.org"] 
    f = open("urls.txt") 
    start_urls = f 

    def parse(self, response): 
     filename = response.url.split("/")[-2] 
     open(filename, 'wb').write(response.body) 

Trả lời

30

Bạn đã khá thân thiết.

f = open("urls.txt") 
start_urls = [url.strip() for url in f.readlines()] 
f.close() 

... vẫn tốt hơn là nên sử dụng người quản lý bối cảnh để đảm bảo của tập tin đóng như mong đợi:

with open("urls.txt", "rt") as f: 
    start_urls = [url.strip() for url in f.readlines()] 
+2

'readlines() 'giữ lại dòng mới vào cuối mỗi dòng. Tôi đã gửi bản chỉnh sửa sẽ 'strip()' các dòng mới và đóng tệp. –

4

Nếu DMOZ hy vọng chỉ tên tập tin trong danh sách, bạn phải gọi dải trên mỗi hàng. Nếu không, bạn sẽ nhận được '\ n' ở cuối mỗi URL.

class DmozSpider(BaseSpider): 
    name = "dmoz" 
    allowed_domains = ["dmoz.org"] 
    start_urls = [l.strip() for l in open('urls.txt').readlines()] 

Ví dụ bằng Python 2,7

>>> open('urls.txt').readlines() 
['http://site.org\n', 'http://example.org\n', 'http://example.com/page\n'] 
>>> [l.strip() for l in open('urls.txt').readlines()] 
['http://site.org', 'http://example.org', 'http://example.com/page'] 
+0

Cảm ơn, khi tôi chạy mã từ ví dụ Brians ở trên, tôi thấy các lỗi về định dạng URL. Ví dụ dmoz phế liệu có mã hóa cứng của URL và được báo giá bằng dấu phẩy. Việc xóa dấu ngoặc kép và dấu phẩy đã giải quyết được sự cố và hiện tại chúng đang được đọc một dòng trên mỗi dòng. – Anagio

Các vấn đề liên quan