cuốn sách gpt4 ai đã làm

BeautifulSoup(bs4) được giải thích chi tiết

In lại Tác giả: Sahara Thời gian cập nhật: 2024-11-30 22:25:15 56 4
mua khóa gpt4 Nike

BeautifulSoup(bs4)

BeautifulSoup là một thư viện trong python. cấp một số hàm đơn giản, kiểu python để xử lý công việc hướng dẫn, tìm kiếm, sửa đổi phân tích cây và các hàm Vì nó đơn đơn giản, bạn có thể viết một chương trình hoàn chỉnh mà không cần nhiều mã.

cài đặt bs4

Cài đặt trực tiếp bằng pip cài đặt lệnh.

cài đặt pip beautifulsoup4

cú pháp phân tích lxml

lxml là hiệu suất Python thư viện cao để xử lý XML và HTML tài liệu. hơn nữa, đặc biệt khi xử lý các tài liệu lớn, lxml có thể được sử dụng cùng với bs4, cũng có thể được sử dụng một mình.

cài đặt lxml

Cũng sử dụng pip cài đặt để cài đặt.

cài đặt lxml pip

Việc sử dụng nó sẽ được giải quyết tương tự như bs4.

Súp đẹp Súp đẹp

  • .title: Lấy thẻ tiêu đề.

    html_doc=""".... """"Câu chuyện của Dormouse
    
  • .name lấy tệp hoặc thẻ tên loại.

    đậu = BeautifulSoup(html_doc, 'lxml') print(soup.title.name) print(soup.name) #output->title #[document]
    
  • .string/.text: Lấy nội dung văn bản trong nhãn.

    rụng = BeautifulSoup(html_doc, 'lxml') print(soup.title.string) print(soup.title.text) #output->Câu chuyện của Ký túc xá #Câu chuyện của Ký túc xá
    
  • .p: Get tag.

    lật = BeautifulSoup(html_doc, 'lxml') print(soup.p) #output->

    Câu chuyện về chú chuột Dormouse

  • .find_all(name,attrs={}): Lấy tất cả các thẻ, tham số: thẻ tên, suy nghĩ như 'a'a tag, 'p'p tag, vv, attrs={}: từ lọc giá trị thuộc tính như attrs= {'lớp': 'câu chuyện'} .

    #Tạo cú pháp phân tích đối tượng beautifulsoup dưới dạng lxml trượt = BeautifulSoup(html_doc, 'lxml') print(soup.find_all('p')) print(soup.find_all('p', attrs={'class' : 'tiêu đề'} ) )
    
    
  • .find(name,attrs={}): Lần đầu tiên lấy được phần tử mãn điều kiện.

    lớp = BeautifulSoup(html_doc, 'lxml') print(soup.find(id="link1")) #output->Elsie
    
  • .parent: Lấy thẻ cha.

    lật = BeautifulSoup(html_doc, 'lxml') print(soup.title.parent) #output->Câu chuyện về chú chuột Dormouse
    
  • .p['class']: Lấy giá trị của lớp.

    Lớp = BeautifulSoup(html_doc, 'lxml') print(soup.p["class"]) #output->['title']
    
  • .get_text(): Lấy toàn bộ bản văn nội dung trong tài liệu.

    Lớp = BeautifulSoup(html_doc, 'lxml') print(soup.get_text()) họ là Elsie, Lacie và Tillie và họ sống ở tầng dưới;
    
  • Find link to all tags from document.

    a_tags = soup.find_all('a') cho a_tag trong a_tags: print(a_tag.get("href")) #output->https://example.com/elsie #https://example.com/lacie # https://example.com/tillie
    

Các loại đối tượng BeautifulSoup

Khi bạn sử dụng BeautifulSoup để phân tích cú pháp HTML hoặc XML tài liệu, BeautifulSoup sẽ chuyển đổi toàn bộ cây cấu trúc thành phần tài liệu, trong đó mỗi nút (thẻ, văn bản, nhận xét) được biểu hiện dưới dạng Python đối tượng.

Cây cấu trúc của BeautifulSoup

Trong HTML tài liệu, nút gốc thường là thẻ và các thẻ và bản văn bản nội dung còn lại là các nút của nó.

If has HTML document after

  Câu chuyện của Chuột Dormouse   

Câu chuyện của Chuột Dormouse

Ngày xử lý cũ...

Xem sitemap của VNExpress
  • Sau khi phân tích bởi Beautiful Soup,là nút gốc vàliền kề<đầu>là nút con của nó và có thể được lấy theo cách tương tựĐúng<đầu>node con,

    Đúngnút con

object type

BeautifulSoup có bốn loại chính là Tag, NavigableString, BeautifulSoup và Comment.

Nhãn

Thẻ đối tượng giống như các thẻ trong HTML hoặc XML gốc của tài liệu. bản và thuộc tính khác.

Lớp = BeautifulSoup(html_doc, 'lxml') tag = Lớp.title print(type(tag)) #output->

Object NavigableString đại diện cho nội dung văn bản bên trong thẻ, đây là một chuỗi bất kỳ có thể được thu thập bằng cách use .string của Tag đối tượng.

lớp = BeautifulSoup(html_doc, 'lxml') tag = Lớp.title print(type(tag.string)) #output-> 

Trợ giúp tốt đẹp

Object BeautifulSoup đại diện cho nội dung của toàn bộ tài liệu. Nhưng không có tên và thuộc tính.

lật = BeautifulSoup(html_doc, 'lxml') print(type(soup)) #output-> 

Bình luận

Object Comment là một loại NavigableString đối tượng đặc biệt đại diện cho phần nhận xét trong HTML và XML.

#  lật = BeautifulSoup(html_doc, 'lxml') print(type(soup.b.string)) #output-> 

BeautifulSoup duyệt tài liệu cây

BeautifulSoup cung cấp nhiều phương thức để duyệt qua cú pháp phân tích tài liệu cây.

Nút điều hướng

  • .parent.cha mẹ:.parentBạn có thể lấy cấp độ cao hơn của nút hiện tại,.cha mẹBạn có thể duyệt qua để lấy tất cả các nút hiện tại của nút.
súp = BeautifulSoup(html_doc, 'lxml') title_tag = soup.title print(title_tag.parent) #Câu chuyện về chú chuột Dormouse
súp = BeautifulSoup(html_doc, 'lxml') body_tag = soup.body dành cho cha mẹ trong body_tag.parents: print(parent) #Câu chuyện của chú chuột ký túc xá # #

Câu chuyện về chú chuột Dormouse

#

Ngày xửa ngày xưa có ba cô em gái nhỏ và tên của họ là #Elsie, #.... Xem sitemap của VNExpress

nút con điều hướng

  • .contents: Có thể lấy tất cả các nút con của nút hiện tại
súp = BeautifulSoup(html_doc, 'lxml') head_contents = soup.head.contents print(head_contents) #output-> [Câu chuyện về chú chuột ký túc xá]
  • .những đứa trẻ: Có thể duyệt tất cả các nút con của nút hiện tại và trả về một danh sách
súp = BeautifulSoup(html_doc, 'lxml') body_children = canh.body.children cho trẻ em trong body_children: print(child) #output->

Câu chuyện về chú chuột ký túc xá #Elsie, #Tillie; #và họ sống dưới đáy giếng.

#.....
  • chuỗi không.những đứa trẻ.contentstài sản

Điều hướng tất cả các nút con cháu

Thuộc tính .contents và .children chỉ chứa các nút con trực tiếp của thẻ. Ví dụ: thẻ chỉ có một nút con trực tiếp .<p>

#[Câu chuyện về chú chuột Dormouse]

Nhưng thẻ cũng chứa một nút con: chuỗi "The Dormouse's story". Chuỗi "The Dormouse's story" là nút con của thẻ <head>.<p> <ul> <li><code>.hậu duệ</code>Các thuộc tính có thể duyệt qua tất cả các nút con của nút hiện tại (truyền tải lớp)</li> </ul> <pre><code class="language-python">súp = BeautifulSoup(html_doc, 'lxml') cho hậu duệ trong sup.descendants: print(descendant) </code></pre> <h3 id="节点内容">Nội dung nút</h3> <ul> <li> <p>.sợi dây .</p> <ul> <li> <p>Nếu thẻ chỉ có một nút con loại NavigableString thì thẻ này có thể sử dụng .string để lấy nút con của nó.</p> <pre><code class="language-python">súp = BeautifulSoup(html_doc, 'lxml') print(soup.head.string) #The Dormouse's story print(soup.title.string) #The Dormouse's story </code></pre> </li> <li> <p>Tuy nhiên, nếu thẻ chứa nhiều nút con, thẻ không thể xác định byte nội dung nào mà phương thức chuỗi sẽ được gọi và Không có sẽ là đầu ra.</p> <pre><code class="language-python">súp = BeautifulSoup(html_doc, 'lxml') print(soup.body.string) #None </code></pre> </li> </ul> </li> <li> <p>.strings và .stripped_strings.</p> <ul> <li><code>.strings</code>Bạn có thể duyệt qua để lấy tất cả nội dung văn bản trong thẻ,<code>.stripped_strings</code>Có thể loại bỏ các ký tự khoảng trắng thừa</li> </ul> <pre><code class="language-python">súp = BeautifulSoup(html_doc, 'lxml') cho chuỗi trong súp.strings: print(string) #The Dormouse's story ...... #The Dormouse's story </code></pre> <pre><code class="language-python">súp = BeautifulSoup(html_doc, 'lxml') cho chuỗi trong súp.stripped_strings: print(string) #The Dormouse's story #The Dormouse's story #Ngày xửa ngày xưa có ba cô em gái và tên của họ là #Elsie #, .. . </code></pre> </li> </ul> <h1 id="beautifulsoup搜索文档树">Cây tài liệu tìm kiếm BeautifulSoup</h1> <blockquote> <p>BeautifulSoup cung cấp nhiều phương pháp tìm kiếm cây tài liệu được phân tích cú pháp.</p> </blockquote> <h2 id="find_allname--attrs--recursive--string--kwargs">find_all(name, attrs, đệ quy, chuỗi, **kwargs)</h2> <ul> <li><code>tìm_all()</code>Phương thức tìm kiếm tất cả các nút con của thẻ của thẻ hiện tại</li> </ul> <pre><code class="language-python">súp = BeautifulSoup(html_doc, 'lxml') print(soup.find_all("title")) # Tìm tất cả các thẻ tiêu đề print(soup.find_all("p", "title")) # Tìm thẻ p với thẻ tiêu đề lớp print(soup.find_all("a")) # Tìm tất cả các thẻ print(soup.find_all(id="link2")) # Tìm thẻ có id link2 #[<title>Câu chuyện của Dormouse] #[

Câu chuyện của Dormouse

] #[Elsie, Lacie, Tillie] #[Lacie]

Tiếp theo, hãy phân tích chi tiết ý nghĩa của từng tham số.

tham số tên

Tham số tên có thể tìm kiếm tất cả các thẻ có tên và chuỗi đối tượng tên sẽ tự động bị bỏ qua.

  • ví dụ.

    súp.find_all("title") # [Câu chuyện về chú chuột Dormouse]
    
  • Tham số tên có thể là bất kỳ loại bộ lọc nào, có giới hạn như chuỗi, biểu thức chính quy, danh sách, phương thức, vv

  • Truyền chuỗi.

    Truyền vào một chuỗi là bộ lọc đơn giản nhất. nội dung phù hợp với chuỗi đó.

    • Ví dụ sau đây được sử dụng để tìm tất cả cácNhãn
    súp.find_all('b') # [Câu chuyện về chú chuột Dormouse]
    
  • Truyền vào biểu thức chính.

    Beautiful Soup sẽ match nội dung thông qua biểu thức chính match().

    trượt = BeautifulSoup(html_doc, 'lxml') cho thẻ trong siêu nhỏ.find_all(re.compile("^b")): print(tag.name) # body # b
    
  • Vượt qua danh sách.

    Nếu một số tham số được truyền vào, Beautiful Soup sẽ trả về nội dung phù hợp với bất kỳ phần tử nào trong danh sách.

    • Tìm tất cả tài liệutag andNhãn
    trượt = BeautifulSoup(html_doc, 'lxml') cho thẻ trong siêu nhỏ.find_all(['a', 'b']): print(tag.name) #b #a #a #a #b
    

**kwargs information

Trong BeautifulSoup, **kwargs (tức là các tham số từ khóa) có thể được sử dụng để tìm các thẻ cụ thông tin thuộc tính của tag. trở nên mạnh mẽ hơn. list.

use dict

  • You can be usedkhóa='từ'Truyền tham số
Lớp = BeautifulSoup(html_doc, 'lxml') print(soup.find_all(id='link1')) #[Elsie]

Use the quy tắc biểu thức chính

  • sử dụngPythoncủaghi chú ReBiểu thức chính trong mô-đun để khớp với các thuộc tính giá trị, giúp tìm kiếm hoạt động hơn
trượt = BeautifulSoup(html_doc, 'lxml') print(soup.find_all('a', href=re.compile("elsie"))) # Tìm thẻ chứa elsie trong thuộc tính href print(soup.find_all(string = re.compile("^The"))) # Tìm các thẻ bắt đầu bằng The in text #[Elsie] #["Câu chuyện của Ký túc xá", "Câu chuyện của Ký túc xá"]

use list

  • Một danh sách có thể được chuyển đổi làm giá trị của từ khóa đối số.Trợ giúp tốt đẹpsẽ phù hợp với bất kỳ giá trị nào trong danh sách
trượt = BeautifulSoup(html_doc, 'lxml') print(soup.find('a', id=['link1', 'link2'])) # Tìm thẻ có id là link1 hoặc link2 print(soup.find_all( class_ = ['sister', 'story'])) # Tìm các thẻ có lớp Sister hoặc story #Elsie #[

Ngày xử lý ngày xưa có ba cô em gái và tên của họ là #...

Thuộc tính đặc biệt của tên

Thuộc tính tên HTML xung đột với các từ dành riêng của Python. đặc biệt.

  • lớp học_: use for somatchlớp họctài sản
  • data-*: use for match optiondata-*tài sản
Cuốn = BeautifulSoup(html_doc, 'lxml') print(soup.find_all('p', class_="title")) # Tìm tất cả các thẻ p có tiêu đề lớp print(soup.find_all('p', attrs= {' data -p', 'story'})) # Tìm Tất cả các thẻ p có câu chuyện về lớp #[

Câu chuyện của Ký túc xá

] #[

Ngày xử lý ngày xưa có ba cô em gái và tên của họ là #Elsie, #Lacie

text/chuỗi tham số

Tham số văn bản/chuỗi cho phép người vận hành tìm kiếm dựa trên nội dung văn bản tương tự như tham số. tên, văn bản tham số cũng hỗ trợ nhiều loại giá trị, bao gồm biểu thức thông thường, chuỗi danh sách và văn bản được hỗ trợ bs4 sớm. bs4 gần đây sẽ hỗ trợ văn bản.

Sử dụng chuỗi kết hợp

Beautiful Soup sẽ tìm tất cả các thẻ chứa chuỗi đó.

Cuốn = BeautifulSoup(html_doc, 'lxml') print(soup.find_all(string='Elsie')) #['Elsie']

Use the quy tắc chính biểu thức hợp nhất

Cuốn = BeautifulSoup(html_doc, 'lxml') print(soup.find_all(string=re.compile('sister'), limit=2)) . biên dịch('Dormouse'))) # Tìm các chuỗi chứa Dormouse #['Ngày xử lý ngày xưa có ba cô em gái và tên của họ là\n'] #["Câu chuyện của Dormouse", "Câu chuyện của Dormouse"]

Sử dụng danh sách hợp nhất

Cuốn = BeautifulSoup(html_doc, 'lxml') print(soup.find_all(string=['Elsie', 'Lacie', 'Tillie'])) #['Elsie', 'Lacie', 'Tillie']

giới hạn tham số

Tham số limit trong BeautifulSoup được sử dụng để giới hạn số lượng kết quả được trả về bởi phương pháp thức find_all Khi chỉ cần truy vấn một vài thẻ đầu tiên, việc sử dụng giới hạn tham số có thể cải thiện hiệu quả tìm kiếm kiếm. giới hạn, quá trình tìm kiếm sẽ dừng lại và trả về kết quả.

trượt = BeautifulSoup(html_doc, 'lxml') print(soup.find_all('a', limit=2)) # Tìm tất cả các thẻ a và giới hạn đầu ra ở 2 #[Elsie, Lacie ]

find_parents() và find_parent()

BeautifulSoup cung cấp các phương thức find_parents() và find_parent() để tìm thẻ trở lên trong cú pháp phân tích tài liệu cây khác nhau. chính giữa hai phương thức là số lượng kết quả được trả về.

  • find_parent(name=None, attrs={}, **kwargs):Chỉ trả về thẻ cha gần nhất (tức là thẻ cha phù hợp đầu tiên)
  • find_parents(name=None, attrs={}, limit=None, **kwargs):Trả lời về tất cả các thẻ đáp ứng tiêu chí đầu tiên được sắp xếp từ gần nhất đến xa nhất
Xô = BeautifulSoup(html_doc, 'lxml') a_string = soup.find(string='Lacie') print(a_string.find_parent()) # Tìm nút cha print('---------- - - - --') print(a_string.find_parents()) #Tìm tất cả các nút cha#Lacie #---------------- #[Lacie, 

Ngày xử lý cũ có ba cô em gái và họ tên là #;Elsie, #Lacie và #và họ sống dưới đáy giếng.

, ....] Xem sitemap của VNExpress

Bộ chọn CSS của BeautifulSoup

Khi viết CSS, chúng tôi không thêm bất kỳ sửa đổi nào vào tên thẻ, thêm dấu chấm trước tên lớp và thêm # trước tên id. Có thể sử dụng một phương thức tương tự để lọc các thành phần trong BeautifulSoup.

select(selector, namespaces=None, limit=None, **kwargs)

Phương thức select() trong BeautifulSoup cho phép sử dụng bộ chọn CSS để tìm các phần tử tài liệu HTML, trả về một danh sách chứa tất cả các phần tử khớp tương tự như phương thức find_all().

  • bộ chọn: một chuỗi đại diện cho bộ chọn CSS sẽ được chọn, có thể là bộ chọn nhãn đơn giản, bộ chọn lớp hoặc bộ chọn id

Tìm kiếm theo tên thẻ

súp = BeautifulSoup(html_doc, 'lxml') print(soup.select('b')) #[Câu chuyện của chú chuột Dormouse, ]

Tìm theo tên lớp

súp = BeautifulSoup(html_doc, 'lxml') print(soup.select('.title')) #[

Câu chuyện về chú chuột Dormouse

]

Tìm kiếm tên ID

súp = BeautifulSoup(html_doc, 'lxml') print(soup.select('#link1')) #[ Elsie]

tìm kiếm kết hợp

  • Việc tìm kiếm kết hợp cũng giống như khi viết một lớp. Nguyên tắc kết hợp tên nhãn và tên id tên lớp là như nhau.

ví dụ: Tìm nội dung có id link1 trong thẻ p.

súp = BeautifulSoup(html_doc, 'lxml') print(soup.select('p #link1')) #[Elsie]
  • Bạn cũng có thể sử dụng thẻ của bộ chọn id khi tìm kiếm bộ chọn lớp
súp = BeautifulSoup(html_doc, 'lxml') print(soup.select('.story#text'))
  • Tìm thẻ có nhiều bộ chọn lớp và bộ chọn id
súp = BeautifulSoup(html_doc, 'lxml') print(soup.select(".story .sister#link1")) #[Elsie]

Tra cứu thuộc tính

Chọn nhãn có thuộc tính hoặc giá trị thuộc tính cụ thể.

  • Bộ chọn thuộc tính đơn giản.

    • Chọn thẻ có thuộc tính cụ thể
    súp = BeautifulSoup(html_doc, 'lxml') print(soup.select("a[href='https://example.com/elsie']")) # Chọn thuộc tính href trong thẻ a là https:/ /example. Thẻ cho com/elsie #[Elsie]
    
  • Bộ chọn giá trị thuộc tính.

    Chọn các thẻ có giá trị thuộc tính cụ thể.

    • Kết hợp chính xác:[thuộc tính="giá trị"]
    • khớp một phần
      • Chứa các giá trị cụ thể:[thuộc tính~="giá trị"] Chọn các thẻ có giá trị thuộc tính chứa các từ cụ thể.
      • Bắt đầu với một giá trị cụ thể:[thuộc tính^="giá trị"] Chọn các thẻ có giá trị thuộc tính bắt đầu bằng một chuỗi cụ thể
      • Kết thúc bằng một giá trị cụ thể:[thuộc tính$="giá trị"] Chọn các thẻ có giá trị thuộc tính kết thúc bằng một chuỗi cụ thể.
      • Chứa các chuỗi con cụ thể:[thuộc tính*="giá trị"] Chọn các thẻ có giá trị thuộc tính chứa một chuỗi con cụ thể
    súp = BeautifulSoup(html_doc, 'lxml') print(soup.select('a[href^="https://example.com"]')) # Chọn thẻ có href bắt đầu bằng https://example. com #[Elsie, Lacie, Tillie]
    

Cuối cùng, bài viết giải thích chi tiết về BeautifulSoup (bs4) kết thúc tại đây. Nếu bạn muốn biết thêm về lời giải thích chi tiết về BeautifulSoup (bs4), vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt các bài viết liên quan. trong tương lai! .

56 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress