Hãy thử saveFullHtmlPage('//www.google.com', 'google') 1 dưới đây hoặc điều chỉnh nó.
Sẽ lưu một sửa đổi *.html và lưu javascripts, css và hình ảnh dựa trên tập lệnh thẻ, liên kết và IMG (TAGS_INNER DIENS TÍNH NĂNG) trên thư mục saveFullHtmlPage('//www.google.com', 'google') 2.
import os, sys, re import requests from urllib.parse import urljoin from bs4 import BeautifulSoup def saveFullHtmlPage(url, pagepath='page', session=requests.Session(), html=None): """Save web page html and supported contents * pagepath : path-to-page It will create a file `'path-to-page'.html` and a folder `'path-to-page'_files` """ def savenRename(soup, pagefolder, session, url, tag, inner): if not os.path.exists(pagefolder): # create only once os.mkdir(pagefolder) for res in soup.findAll(tag): # images, css, etc.. if res.has_attr(inner): # check inner tag (file object) MUST exists try: filename, ext = os.path.splitext(os.path.basename(res[inner])) # get name and extension filename = re.sub('\W+', '', filename) + ext # clean special chars from name fileurl = urljoin(url, res.get(inner)) filepath = os.path.join(pagefolder, filename) # rename html ref so can move html and folder of files anywhere res[inner] = os.path.join(os.path.basename(pagefolder), filename) if not os.path.isfile(filepath): # was not downloaded with open(filepath, 'wb') as file: filebin = session.get(fileurl) file.write(filebin.content) except Exception as exc: print(exc, file=sys.stderr) if not html: html = session.get(url).text soup = BeautifulSoup(html, "html.parser") path, _ = os.path.splitext(pagepath) pagefolder = path+'_files' # page contents folder tags_inner = {'img': 'src', 'link': 'href', 'script': 'src'} # tag&inner tags to grab for tag, inner in tags_inner.items(): # saves resource files and rename refs savenRename(soup, pagefolder, session, url, tag, inner) with open(path+'.html', 'wb') as file: # saves modified html doc file.write(soup.prettify('utf-8'))Ví dụ lưu saveFullHtmlPage('//www.google.com', 'google') 3 dưới dạng saveFullHtmlPage('//www.google.com', 'google') 4 và nội dung trên thư mục saveFullHtmlPage('//www.google.com', 'google') 5. (thư mục hiện tại) saving saveFullHtmlPage('//www.google.com', 'google') 3 as saveFullHtmlPage('//www.google.com', 'google') 4 and contents on saveFullHtmlPage('//www.google.com', 'google') 5 folder. (current folder)
saveFullHtmlPage('//www.google.com', 'google')Nội dung
- Mục tiêu bài học
- Về URL
- Mở URL với Python
- Lưu một bản sao cục bộ của một trang web
- Bài đọc đề xuất
- Đồng bộ hóa mã
Mục tiêu bài học
Về URL
Về URL
Mở URL với Python
protocol://host:port/path?query
Lưu một bản sao cục bộ của một trang web
//oldbaileyonline.org
Bài đọc đề xuất
Đồng bộ hóa mã
//oldbaileyonline.org:80
Bài học này giới thiệu các trình định vị tài nguyên thống nhất (URL) và giải thích cách sử dụng Python để tải xuống và lưu nội dung của trang web vào ổ cứng cục bộ của bạn.
//oldbaileyonline.org/static/Project.jsp
Một trang web là một tệp được lưu trữ trên một máy tính khác, một máy được gọi là máy chủ web. Khi bạn đi đến một trang web, điều thực sự xảy ra là máy tính của bạn, (máy khách) gửi yêu cầu đến máy chủ (máy chủ) qua mạng và máy chủ trả lời bằng cách gửi lại một bản sao của trang cho máy của bạn. Một cách để đến một trang web với trình duyệt của bạn là theo một liên kết từ một nơi khác. Tất nhiên, bạn cũng có khả năng dán hoặc nhập Trình định vị tài nguyên thống nhất (URL) trực tiếp vào trình duyệt của bạn. URL cho biết trình duyệt của bạn nơi tìm tài nguyên trực tuyến bằng cách chỉ định máy chủ, thư mục và tên của tệp sẽ được truy xuất, cũng như loại giao thức mà máy chủ và trình duyệt của bạn sẽ đồng ý sử dụng trong khi trao đổi thông tin (như HTTP, Giao thức chuyển siêu văn bản). Cấu trúc cơ bản của URL là
//www.oldbaileyonline.org/search.jsp?form=searchHomePage&_divs_fulltext=arsenic&kwparse=and&_persNames_surname=&_persNames_given=&_persNames_alias=&_offences_offenceCategory_offenceSubcategory=&_verdicts_verdictCategory_verdictSubcategory=&_punishments_punishmentCategory_punishmentSubcategory=&_divs_div0Type_div1Type=&fromMonth=&fromYear=&toMonth=&toYear=&ref=&submit.x=0&submit.y=0
Hãy cùng nhìn vào một vài ví dụ.
Mở URL với Python
Lưu một bản sao cục bộ của một trang web
Bài đọc đề xuất
Đồng bộ hóa mã
Bài học này giới thiệu các trình định vị tài nguyên thống nhất (URL) và giải thích cách sử dụng Python để tải xuống và lưu nội dung của trang web vào ổ cứng cục bộ của bạn.
//www.oldbaileyonline.org/browse.jsp?id=t17800628-33&div=t17800628-33
Một trang web là một tệp được lưu trữ trên một máy tính khác, một máy được gọi là máy chủ web. Khi bạn đi đến một trang web, điều thực sự xảy ra là máy tính của bạn, (máy khách) gửi yêu cầu đến máy chủ (máy chủ) qua mạng và máy chủ trả lời bằng cách gửi lại một bản sao của trang cho máy của bạn. Một cách để đến một trang web với trình duyệt của bạn là theo một liên kết từ một nơi khác. Tất nhiên, bạn cũng có khả năng dán hoặc nhập Trình định vị tài nguyên thống nhất (URL) trực tiếp vào trình duyệt của bạn. URL cho biết trình duyệt của bạn nơi tìm tài nguyên trực tuyến bằng cách chỉ định máy chủ, thư mục và tên của tệp sẽ được truy xuất, cũng như loại giao thức mà máy chủ và trình duyệt của bạn sẽ đồng ý sử dụng trong khi trao đổi thông tin (như HTTP, Giao thức chuyển siêu văn bản). Cấu trúc cơ bản của URL là
Trang bảng điểm dùng thử của Benjamin Bowsey, 1780
Dành một vài phút để xem trang dùng thử Benjamin Bowsey. Ở đây chúng tôi không quan tâm nhiều đến những gì bảng điểm nói, nhưng những tính năng của trang. Lưu ý xem xem liên kết XML ở phía dưới sẽ đưa bạn đến một phiên bản được đánh dấu rất nhiều của văn bản có thể hữu ích cho một số loại nghiên cứu nhất định. Bạn cũng có thể xem xét quét tài liệu gốc, được phiên âm để tạo tài nguyên này.
Bây giờ, hãy để thử mở trang bằng Python. Sao chép chương trình sau vào Chỉnh sửa Komodo và lưu nó dưới dạng saveFullHtmlPage('//www.google.com', 'google') 9. Khi bạn thực hiện chương trình, nó sẽ protocol://host:port/path?query 0 Tệp dùng thử, protocol://host:port/path?query 1 Nội dung của nó thành chuỗi python có tên WebContent và sau đó protocol://host:port/path?query 2 ba trăm ký tự đầu tiên của chuỗi vào khung đầu ra của lệnh. Sử dụng lệnh protocol://host:port/path?query 3 trong Firefox để xác minh rằng nguồn HTML của trang giống như nguồn mà chương trình của bạn đã truy xuất. Mỗi trình duyệt có một phím tắt khác nhau để mở nguồn trang. Trong Firefox trên PC, đó là protocol://host:port/path?query 4. Nếu bạn không thể tìm thấy nó trên trình duyệt của mình, hãy thử sử dụng công cụ tìm kiếm để tìm nó ở đâu. (Xem tham chiếu thư viện Python để tìm hiểu thêm về Urllib.)
________số 8
Năm dòng mã này đạt được rất nhiều rất nhanh. Hãy để chúng tôi dành một chút thời gian để đảm bảo rằng mọi thứ đều rõ ràng và bạn có thể nhận ra các khối xây dựng cho phép chúng tôi làm cho chương trình này làm những gì chúng tôi muốn nó làm.
URL, phản hồi và webcontent là tất cả các biến mà chúng tôi đã tự đặt tên.
URL giữ URL của trang web mà chúng tôi muốn tải xuống. Trong trường hợp này, đây là phiên tòa của Benjamin Bowsey.
Trên dòng sau, chúng tôi gọi hàm protocol://host:port/path?query 5, được lưu trữ trong mô -đun Python có tên protocol://host:port/path?query 6 và chúng tôi đã yêu cầu chức năng đó mở trang web được tìm thấy tại URL mà chúng tôi vừa chỉ định. Sau đó, chúng tôi đã lưu kết quả của quá trình đó vào một biến có tên là phản hồi. Biến đó hiện chứa một phiên bản mở của trang web được yêu cầu.
Sau đó, chúng tôi sử dụng phương thức protocol://host:port/path?query 1 mà chúng tôi đã sử dụng trước đó, để sao chép nội dung của trang web mở đó vào một biến mới có tên WebContent.
Hãy chắc chắn rằng bạn có thể chọn ra các biến (có 3 trong số chúng), các mô -đun (1), các phương thức (2) và các tham số (1) trước khi bạn tiếp tục.
Trong đầu ra kết quả, bạn sẽ nhận thấy một chút đánh dấu HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "//www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="//www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Browse - Central Criminal Court</title> <meta http-equiv="content-type" content=
Nội dung của bản thân thử nghiệm ở xa hơn nhiều trên trang. Những gì chúng ta thấy ở đây là mã HTML ở đầu tài liệu. Đây không hoàn toàn là những gì chúng ta cần cho nghiên cứu lịch sử, nhưng đừng lo lắng; Bạn sẽ sớm học cách xóa đánh dấu dư thừa đó và nhận được nội dung bạn đang theo đuổi.
Lưu một bản sao cục bộ của một trang web
Đưa ra những gì bạn đã biết về việc viết vào các tệp, thật dễ dàng để sửa đổi chương trình trên để nó ghi nội dung của chuỗi webcontent vào một tệp cục bộ trên máy tính của chúng tôi thay vì vào khung đầu ra lệnh của Cameron. Sao chép chương trình sau vào Chỉnh sửa Komodo, lưu nó dưới dạng protocol://host:port/path?query 8 và thực hiện nó. Sử dụng lệnh protocol://host:port/path?query 9 trong Firefox, hãy mở tệp trên ổ cứng của bạn mà nó tạo (//oldbaileyonline.org 0) để xác nhận rằng bản sao đã lưu của bạn giống như bản sao trực tuyến.
saveFullHtmlPage('//www.google.com', 'google') 0
Vì vậy, nếu bạn có thể lưu một tệp duy nhất một cách dễ dàng, bạn có thể viết một chương trình để tải xuống một loạt các tệp không? Ví dụ, bạn có thể bước qua ID dùng thử, và tạo ra các bản sao của riêng bạn của một nhóm chúng không? Chuẩn rồi. Bạn có thể tìm hiểu cách thực hiện điều đó trong việc tải xuống nhiều tệp bằng các chuỗi truy vấn mà chúng tôi khuyên bạn nên hoàn thành các bài học giới thiệu trong loạt bài này.
Bài đọc đề xuất
- Lutz, Mark. “Ch. 4: Giới thiệu các loại đối tượng Python, học Python (O hèReilly, 1999).
Đồng bộ hóa mã
Để làm theo cùng với các bài học trong tương lai, điều quan trọng là bạn có các tệp và chương trình phù hợp trong thư mục lập trình của bạn. Khi kết thúc mỗi bài học, bạn có thể tải xuống tệp ZIP lập trình-Historian Hitming-Historian để đảm bảo bạn có mã chính xác.
- Lập trình-Historian-1 (ZIP)