2017-11-22 27 views
5

Tôi viết một kịch bản để nắm bắt ngày độc lập của một vài quốc gia trên Wikipedia.Python & Beautiful Soup: Chỉ tìm kiếm trong một lớp nhất định

Ví dụ, với Kazakhstan:

URL_QS = 'https://en.wikipedia.org/wiki/Kazakhstan' 
r = requests.get(URL_QS) 
soup = BeautifulSoup(r.text, 'lxml') 

# Only keep the infobox (top right) 
infobox = soup.find("table", class_="infobox geography vcard") 

if infobox: 
    formation = infobox.find_next(text = re.compile("Formation")) 

    if formation: 
     independence = formation.find_next(text = re.compile("independence")) 

     if independence: 
      independ_date = independence.find_next("td").text 
     else: 
      independence = formation.find_next(text = re.compile("Independence")) 

      if independence: 
       independ_date = independence.find_next("td").text 


print(independ_date) 

Và tôi có kết quả như sau:

Almaty 

sản lượng này không được chuyển ngữ trong hộp thông tin nhưng sau đó, trong văn bản. Đó là vì "geometry.find_next (text = re.compile (" độc lập "))" tìm thấy thứ gì đó bên ngoài hộp thông tin nhưng tôi không hiểu tại sao nghiên cứu không nên được thực hiện chỉ trong hộp thông tin? Làm cách nào tôi có thể tìm kiếm trong trường này?

Cảm ơn bạn trước sự giúp đỡ của bạn!

+0

hình = infobox.find_next (text = re.compile ("hình")) Bạn có thể xác nhận lại dòng này, bởi vì nó được trả lại một giá trị "hình thành" cho sự hình thành biến nếu bạn in nó . – kmcodes

Trả lời

1

Đó là bởi vì "formation.find_next (text = re.compile (" độc lập "))" phát hiện ra một cái gì đó bên ngoài của hộp thông tin

thêm .extract() để soup.find() bạn để tìm kiếm chỉ bên trong phần tử infobox geography vcard.

infobox = soup.find("table", class_="infobox geography vcard").extract()

0

Mã của bạn đang tìm kiếm giá trị sau "independence" từ đầu tiên, cũng như chuỗi "Formation" không tổng quát tốt như tôi đã thử nghiệm ở một số quốc gia, do đó tôi nghĩ bạn có thể tìm kiếm trên "Independence" ngay từ đầu:

infobox = soup.find("table", class_="infobox geography vcard") 

if infobox: 
    formation = infobox.find_next(text = re.compile("Independence")) 

    if formation: 
     independence = formation.find_next(text = re.compile("independence")) 

     if independence: 
      independence = infobox.find_next(text = re.compile("Independence")) 
      independ_date = independence.find_next("td").text 

print(independ_date) 

Điều này sẽ trả lại ngày đầu tiên trong phần độc lập của trang wikipedia cho bất kỳ quốc gia nào có ngày độc lập.

Các vấn đề liên quan