Crawl toàn bộ một website (phần 2)

Crawl toàn bộ một website (tiếp tục)

Để tránh crawl cùng page 2 lần, nó là cực kì quan trọng rằng tất cả các links nội bộ khám phá được định dạng ổn
định và giữ trong một tập chạy cho tìm kiếm dễ dàng trong khi chương trình đang chạy. Một tập là tương tự như một
list, nhưng các phần tử không có một trật tự cụ thể, và chỉ các phần tử duy nhất được lưu giữ, cái là lí tưởng
cho các nhu cầu của chúng ta. Chỉ các links cái là mới nên được crawl và tìm kiếm cho các links thêm:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
pages = set()
def getLinks(pageUrl):

html = urlopen(‘http://en.wikipedia.org{}’.format(pageUrl))
bs = BeautifulSoup(html, ‘html.parser’)
for link in bs.find_all(‘a’, href=re.compile(‘^(/wiki/)’)):

if ‘href’ in link.attrs:

if link.attrs[‘href’] not in pages:

#We have encountered a new page

newPage = link.attrs[‘href’]
print(newPage)
pages.add(newPage)
getLinks(newPage)

getLinks(”)

Để thể hiện cho bạn tác dụng đầy đủ của web crawling business làm việc như thế nào, tôi cởi bỏ các tiêu chuẩn vè
cái gì hình thành một link nội bộ (từ các ví dụ trên). Hơn là hạn chế scraper tới các article pages, nó tìm kiếm
cho tất cả các links bắt đầu với /wiki/, bất kể nơi chúng ở trên page, và bất kể liệu chúng có chứa các dấu :. Nhớ
là: các article pages không chứa các dấu hai chấm, nhưng các file-upload pages, talk pages và tương tự chứa các
dấu hai chấm trong URL.

Chia sẻ