แยกค่าตัวเลขโดยไม่มี class id ใน html โดยใช้ BeautifulSoup ใน python

ฉันต้องการแยกมูลค่าของ "จำนวนประชากรรหัสไปรษณีย์โดยประมาณในปี 2558" จากเว็บไซต์ข้อมูลเมืองสำหรับบางภูมิภาค (http://www.city-data.com/zips/17033.html) ฉันใช้บิวตี้ซุปเพื่อดึงคุณค่าออกมา แต่ก็ทำไม่สำเร็จ

ปัญหาคือเนื่องจากไม่มีรหัสคลาสที่เกี่ยวข้อง ดังนั้นฉันจึงใช้ "soup.find(text=re.compile("^จำนวนรหัสไปรษณีย์โดยประมาณในปี 2558"))" แต่จะส่งคืนเฉพาะข้อความเท่านั้น ไม่ใช่ค่าตัวเลขซึ่งก็คือ "17,649"

กรุณาค้นหารหัสของฉันด้านล่าง

from bs4 import BeautifulSoup
import re
import urllib.request
with urllib.request.urlopen('http://www.city-data.com/zips/17033.html') as 
response:
    html = response.read()
    print("html", html)


soup = BeautifulSoup(html, "html.parser")
population=soup.find(text=re.compile("^Estimated zip code population in 2015"))
print(population)

มีข้อเสนอแนะอะไรบ้าง? ขอบคุณล่วงหน้า.


person June Shelter    schedule 22.09.2017    source แหล่งที่มา
comment
หากคุณมีไลบรารี lxml ติดตั้งอยู่ในเครื่องของคุณ แสดงว่ามีวิธีแก้ปัญหาสำหรับคุณ Regex จะไม่จำเป็นสำหรับสิ่งนั้น แจ้งให้เราทราบ   -  person SIM    schedule 23.09.2017
comment
สวัสดี Shahin ขอบคุณสำหรับข้อเสนอแนะของคุณ ใช่ ฉันติดตั้งมันแล้ว ฉันปฏิบัติตามสิ่งที่สมาชิกคนอื่นแนะนำและฉันก็ได้รับผลลัพธ์ แต่ฉันสนใจที่จะสำรวจว่า lxml ทำงานอย่างไร โปรดแจ้งให้เราทราบวิธีใช้ lxml สำหรับสิ่งนี้ได้ไหม   -  person June Shelter    schedule 25.09.2017


คำตอบ (1)


ค้นหาองค์ประกอบของคุณเป็นแท็ก b และค้นหาเป็น next_sibling เพื่อรับข้อความที่คุณต้องการ

ตัวอย่าง:

population = soup.find("b", text=re.compile("^Estimated zip code population in 2015"))
print population.get_text(), population.next_sibling

เอาท์พุต:

จำนวนประชากรรหัสไปรษณีย์โดยประมาณในปี 2558: 17,649

person Zroq    schedule 23.09.2017
comment
Zroq ขอบคุณมาก มันได้ผล ฉันซาบซึ้งจริงๆ - person June Shelter; 25.09.2017