mềm tự động lấy dữ liệu từ web Chức năng của crawler: - lấy thông tin từ server - Trích xuất những thông tin cần thiết - Tìm link trong trang web và tự động truy cập
nếu sever không trả lời thì chương trình sẽ bị đóng bang 2. Nếu không lên kế hoạch truy cập 1 cách hợp lý, chương trình sẽ liên tục truy xuất 1 trang web, điều này sẽ trở thành tấn công Dos vì thế phải quản lý tần suất truy cập của 1 trang web, ví dụ 1request/1s hoặc ít hơn 3. Các link khác nhau nhưng cùng 1 trang web
web đã xử lý xong. Chương trình bị rơi vào vòng lặp vĩnh viễn vì thế phải xây dung phương pháp đánh dấu các link đã xử lý, đơn giản lưu lại url của 1 trang web đã xử lý, trước khi them vào queue 1 url mới thì so sánh các url đã xử lý trước.
crawler truy cập websites thường gây nghẽn mạng, vì thế các trang web có quy định lưu dưới dạng robots.txt. Vd: User-Agent: Googlebot Disallow: /cgi-bin/ với googlebot thì không được truy cập vào /cgi-bin/.
1 URL br.set_handle_equiv(False) #thuộc tính HTTP-EQUIV br.set_handle_gzip(False) #có cho phép gửi dưới dạng nén không(gzip) br.set_handle_robots(False) #Tuân theo robots.txt hay không
#chọn form thứ 0 print br.form #biểu thị form hiện tại br["name"] = "UserName" #điền các thông số cho form hiện tại br["Password"] = "UserPassword" br.submit() #gửi thông số đi
link : Response = mechanize.urlopen(url,timeout=30.0) #timeout là 30s Ngoài ra còn 1 cách khác để thực hiện điều này là sử dụng socket có sẵn trong python : import socket socket.setdefaulttimeout(1000.0)# milisec
chỉ kiểm tra và thao tác trên các web có thông tin encoding là UTF-8 (unicode). res = br.open(url) headers = res.info() if headers["Content-type"].upper() != "TEXT/HTML; CHARSET=UTF-8": print "Error... Not UTF-8" continue
kí tự thuần Việt : VietChar = u"ẠẢÃÀÁÂẬẦẤẨẪĂẮẰẶẲẴÓÒỌÕỎÔỘỔỖỒỐƠỜ ỚỢỞỠÉÈẺẸẼÊẾỀỆỂỄÚÙỤỦŨƯỰỮỬỪỨÍÌỊỈĨÝỲỶỴ ỸĐạảãàáâậầấẩẫăắằặẳẵóòọõỏôộổỗồốơờớợởỡéèẻẹẽêếềệểễú ùụủũưựữửừứíìịỉĩýỳỷỵỹđ“
: LatinChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW XYZ“ Sau đó đếm tổng số kí tự thuần việt vnCount và tổng số kí tự latin có trong web laCount, nếu vnCount/(vnCount+laCount) >10% thì ta phán đoán page đó là page tiếng Việt.