2010-01-07 38 views
99

Tôi đang xem xét viết một ứng dụng web đơn giản để trích xuất thông tin từ một trang web dường như không cấm cụ thể điều này.Quy tắc cào trên web

Tôi đã kiểm tra các lựa chọn thay thế khác (ví dụ: RSS, dịch vụ web) để nhận thông tin này, nhưng không có thông tin nào khả dụng ở giai đoạn này.

Mặc dù điều này tôi cũng đã phát triển/duy trì một vài trang web và vì vậy tôi nhận ra rằng nếu cào web được thực hiện một cách ngây thơ/tham lam, nó có thể làm chậm mọi thứ cho người dùng khác và thường trở thành mối phiền toái.

Vì vậy, những gì nghi thức có liên quan về:

  1. Số lượng yêu cầu mỗi giây/phút/giờ.
  2. Nội dung tác nhân người dùng HTTP.
  3. Nội dung của người giới thiệu HTTP.
  4. Cài đặt bộ nhớ cache HTTP.
  5. Kích thước bộ đệm cho các tệp/tài nguyên lớn hơn.
  6. Vấn đề pháp lý và cấp phép.
  7. Các công cụ hoặc phương pháp thiết kế phù hợp để sử dụng.
  8. Robots.txt, điều này có liên quan đến việc cào web hay chỉ là trình thu thập thông tin/trình thu thập dữ liệu không?
  9. Nén như GZip trong yêu cầu.

Cập nhật

Tìm thấy câu hỏi có liên quan này trên Meta: Etiquette of Screen Scaping StackOverflow. Câu trả lời của Jeff Atwood có một số khuyến nghị hữu ích.

câu hỏi khác StackOverflow liên quan:

Options for html scraping

+1

+1 - Tôi đã tự hỏi bản thân mình. –

+1

Khi nghi ngờ có hay không họ sẽ không thích nó, chỉ cần gửi cho quản trị viên trang web một email và yêu cầu sự cho phép hoặc hỏi họ cách thức/thời điểm họ muốn bạn xóa nó. –

+0

@Rob, gợi ý tốt, nhưng như tôi đã nói với runrunraygun, làm thế nào để bạn tiến hành nếu bạn không nghe lại? – Ash

Trả lời

2

Điều này thực sự phụ thuộc vào những gì bạn đang cạo, và bao nhiêu của nó, bạn đang cạo. Ví dụ, tôi đã phải viết một scraper khoảng một tuần trước để thu thập dữ liệu hàng trăm trang. Để hào phóng, tôi đặt một giây chờ đợi sau mỗi trang. Mất một vài phút để lấy lại dữ liệu, nhưng tôi chắc rằng chủ sở hữu trang web sẽ đánh giá cao bất kỳ sự chậm trễ nào tôi có thể để lại trong quá trình này.

+0

Điểm công bằng, nhưng tại sao 1 giây? Có lý do gì không? – Ash

+0

Tôi đã rất hào phóng. Một yêu cầu ngắn tại một thời điểm. – Sampson

+0

Tôi đã nhìn thấy các yêu cầu cho các trình cắm để đợi 15 giây giữa các lần GET. –

9

Tôi khuyên bạn nên gửi email cho quản trị viên web, cho họ biết bạn đang viết một tập lệnh không độc hại v.v ... và hỏi họ hài lòng với bạn khi nhấn và tần suất.

chúng tôi chạy trình thu thập tên miền, chọn tài liệu pdf/từ, v.v ... từ các tên miền thân thiện và hầu hết chúng tôi đã yêu cầu là khoảng cách 5 giây giữa các yêu cầu và chỉ chạy vào ban đêm.

+0

Đề xuất tốt về việc gửi email, nếu bạn thậm chí nhận được phản hồi. Ngoài ra, có những cân nhắc khác nhau nào giữa việc viết trình thu thập dữ liệu và tìm kiếm web đơn giản? – Ash

+0

Bạn thường đặt gì trong UserAgent? Nó thường khá quan trọng đối với nhiều trang web về cách họ xử lý yêu cầu của bạn. – Ash

+0

Tôi không nghĩ có quá nhiều sự khác biệt so với quan điểm mục tiêu của bạn. Sự khác biệt sẽ giống như là một người lái xe chu đáo, những người biết họ đang đi đâu, và một người lái xe chu đáo không biết họ sẽ đi đâu. Từ một quan điểm thực hiện một lần nữa không khác nhau ồ ạt, chỉ là một câu hỏi về việc xác định các siêu liên kết và tạo danh sách đích của bạn khi bạn đi thay vì cạo một danh sách được xác định trước của href. – gingerbreadboy

17

robots.txt có liên quan: hãy xem xét để có ý tưởng về thái độ của trang web đối với người đọc không phải con người. Hiển thị một số nhận thức về nội dung của nó sẽ cung cấp một số bảo đảm cho webadmin khi bạn gửi email cho họ rằng bạn sẽ chăm sóc để tôn trọng trang web khi bạn cạo.

28

Tuân theo yêu cầu robot.txt của trang web, đây có thể là một trong những cách tốt nhất và đạo đức nhất để đến một thỏa thuận mà không cần nói cho bất kỳ ai trên trang web.

Tự xác định chính xác trong tiêu đề UserAgent.Bằng cách này, trang web có thể xem bạn là ai và giới hạn/cho phép một số khu vực nhất định của trang web của họ cho bạn một cách rõ ràng. Ví dụ, hãy xem các tác nhân người dùng của anh chàng lớn, Google được liệt kê bên dưới và tạo ra một trang tương tự có trang mô tả bạn là ai và cách thông báo cho bot của bạn thu thập thông tin.

chuỗi user-agent của Google: Googlebot/1.0 ([email protected] http://googlebot.com/)

Do gzip sử dụng nén/deflate nếu trang web hỗ trợ, điều này giúp bạn tiết kiệm thời gian và băng thông trang web.

Bạn phải ổn định từ quan điểm pháp lý (mặc dù tôi không phải là luật sư cũng như chuyên gia pháp lý) nếu bạn tuân theo robots.txt và điều khoản dịch vụ của họ.

Cuối cùng, tôi nghĩ rằng lời khuyên tốt nhất là từ runrunraygun xem xét một trang web duy nhất của nó. Liên hệ với quản trị viên và xem những gì sẽ được chấp nhận và tôn trọng mong muốn của họ sẽ giúp bạn có được đến nay.

-1
  1. ~ 5 giây trễ mỗi miền. Bạn có thể điều chỉnh độ trễ của mình dựa trên mức độ nhanh chóng mà trang web trả về nội dung.
  2. user-agent thiết lập để trình duyệt phổ biến để hiển thị trang web như bình thường
  3. giới thiệu thiết lập để nơi trang được liên kết từ
  4. bao lâu tôi nhớ cache phụ thuộc vào trang web. Thông thường 1 tháng.
  5. Tôi chỉ tải về tập tin văn bản và hình ảnh
  6. "dễ dàng hơn để xin tha thứ hơn là để có được sự cho phép"
  7. tôi sử dụng thư viện Python hiện có như lxmlsome I developed myself
  8. scraping web liên quan đến việc thu thập thông/nhện, vì vậy vâng robots.txt là có liên quan
  9. luôn nén

tôi làm rất nhiều scraping web, và đã tìm thấy hầu hết các trang web không theo dõi IP cho hành vi đáng ngờ cả.

Nếu bạn quan tâm, thay vì tải xuống nội dung trực tiếp từ trang web mục tiêu, bạn có thể sử dụng Google Cache, Archive.org, v.v. Hoặc sử dụng proxy.

+0

Như những người khác đã lưu ý, tác nhân người dùng nên được đặt thành thứ gì đó giúp theo dõi tác nhân xuống nếu có sự cố. Giả vờ là một "trình duyệt phổ biến" có thể cần thiết đối với một số trang web và một số trường hợp, nhưng tốt hơn nên báo cáo rằng nếu điều đó là đúng sự thật. Từ quan điểm "ettiquette", tốt hơn hết là chỉ nên sử dụng nếu trang web đó không hoạt động theo cách khác. – nealmcb

-2

Tốt hơn hết là nên sử dụng dịch vụ cạo web chuyên dụng nếu bạn có được dữ liệu cho doanh nghiệp của mình. Kể từ khi web cạo là một quá trình công nghệ chuyên sâu, làm nó trong nhà có thể dễ dàng thoát nguồn lực của bạn và làm giảm sự tăng trưởng của công ty.

0

Tôi cũng sẽ thêm rằng ngay cả tho Python cũng có Khóa thông dịch toàn cục, ví dụ: GIL Nếu bạn đang yêu cầu dữ liệu và tốc độ là bản chất sử dụng mô-đun import multithreading có thể khá hữu ích vì yêu cầu mất thời gian để hoàn thành. Đồng thời nếu bạn yêu cầu nhiều dữ liệu (thực hiện một số lượng lớn yêu cầu), bạn có thể bị cấm và kết nối của bạn có thể bị chặn. Không có cách nào để cho biết ngưỡng trừ khi bạn làm bài kiểm tra.

0

Đối với bất cứ ai quan tâm đến việc nạo web, tôi khuyên các bạn nên đọc cuốn sách này (nó thảo luận về phép xã giao cũng vì vậy tôi cảm thấy nó có liên quan đến các bưu điện):

https://github.com/1040003585/WebScrapingWithPython/blob/master/Packt-Web.Scraping.with.Python.Richard%20Lawson.pdf

Từ kinh nghiệm của tôi trong cào, nếu bạn liên tục đưa ra các yêu cầu mà bạn có thể có trong danh sách đen của mình. Nếu đây là trường hợp bạn có thể nhìn vào một proxy quay như storm proxies. Trang web thực sự không thể phân biệt được nếu bạn đang tìm kiếm/thu thập dữ liệu để robots.txt luôn là ý tưởng tốt để tuân theo.

Theo như tính hợp pháp, từ những gì tôi đã đọc một chút của một khu vực màu xám. Thông thường, nếu bạn cạo như một khách (và không phải là một người dùng đã đăng nhập), bạn sẽ không bị giữ lại bất kỳ điều khoản và điều kiện nào có thể có lời nói ngược lại với các yêu cầu tự động.

Miễn là bạn có thời gian trễ đáng kể giữa các yêu cầu của mình, hãy làm theo robots.txt và thực hiện các bước để ngăn không cho ip của bạn bị liệt vào danh sách đen.