Duyệt qua một domain đơn sử dụng Python (tiếp tục)
Bạn có thể sử dụng các quy tắc này để chỉnh sửa code một chút để giành chỉ các article links mong muốn bằng cách
sử dụng regular expression ^(/wiki/)((?!:).)*$:
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
html = urlopen(‘http://en.wikipedia.org/wiki/Kevin_Bacon’)
bs = BeautifulSoup(html, ‘html.parser’)
for link in bs.find(‘div’, {‘id’:’bodyContent’}).find_all(‘a’, href=re.compile(‘^(/wiki/)((?!:).)*$’)):
print(link.attrs[‘href’])
Chạy cái này, bạn sẽ thấy một danh sách các article URLs cái Wikipedia article về Kevin Bacon link tới.
Tất nhiên, có một script cái tìm tất cả article links trong một hardcode Wikipedia article, trong khi thú vị
là khá không hữu dụng trong thực hành. Bạn cần có thể lấy code này và chuyển dạng nó thành thứ gì đó giống
nhiều hơn cái sau:
+ Một hàm đơn, getLinks, cái lấy một Wikipedia article URL của hình thức /wiki/<Article_Name> và trả về một
danh sách tất cả article URLs liên kết trong cùng hình thức.
+ Một hàm main cái gọi getLinks với một article bắt đầu, chọn một article link tùy biến từ danh sách trả về,
và gọi getLinks một lần nữa cho đến khi bạn dừng chương trình hay cho đến khi không article links nào được
tìm thấy trên trang mới.
Sau đây là code hoàn chỉnh cái hoàn thành cái này:
from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import re
random.seed(datetime.datetime.now())
def getLinks(articleUrl):html = urlopen(‘http://en.wikipedia.org{}’.format(articleUrl))
bs = BeautifulSoup(html, ‘html.parser’)
return bs.find(‘div’, {‘id’:’bodyContent’}).find_all(‘a’,href=re.compile(‘^(/wiki/)((?!:).)*$’))
links = getLinks(‘/wiki/Kevin_Bacon’)
while len(links) > 0:newArticle = links[random.randint(0, len(links)-1)].attrs[‘href’]
print(newArticle)
links = getLinks(newArticle)