- VisualStudio2022
- pprof-Hướng dẫn sử dụng nó trong bản mạng trực tiếp
- Triển khai C# các loại hộp chọn nhiều màu lựa chọn thả xuống, cây lựa chọn nhiều màu lựa chọn thả xuống và các nút tối đa
- [Ghi chú học tập] Cơ sở dữ liệu cấu trúc: cat tree
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 trực tiếp bằng pip cài đặt lệnh.
cài đặt pip beautifulsoup4
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ũ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.
.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
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.
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
là nút gốc và
liền kề<đầu>đầu>
Và
là nút con của nó và có thể được lấy theo cách tương tự
Đúng<đầu>đầu>
node con,
Và
Đúng
nút conBeautifulSoup có bốn loại chính là Tag, NavigableString, BeautifulSoup và Comment.
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->
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->
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 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.
.parent
Và.cha mẹ
:.parent
Bạ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
.contents
: Có thể lấy tất cả các nút con của nút hiện tạisú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áchsú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.
#.....
.những đứa trẻ
Và.contents
tài sảnThuộ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
.
#[Câu chuyện về chú chuột Dormouse ]
Nhưng thẻ
.hậu duệ
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)súp = BeautifulSoup(html_doc, 'lxml') cho hậu duệ trong sup.descendants: print(descendant)
.sợi dây .
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ó.
súp = BeautifulSoup(html_doc, 'lxml') print(soup.head.string) #The Dormouse's story print(soup.title.string) #The Dormouse's story
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.
súp = BeautifulSoup(html_doc, 'lxml') print(soup.body.string) #None
.strings và .stripped_strings.
.strings
Bạn có thể duyệt qua để lấy tất cả nội dung văn bản trong thẻ,.stripped_strings
Có thể loại bỏ các ký tự khoảng trắng thừasúp = BeautifulSoup(html_doc, 'lxml') cho chuỗi trong súp.strings: print(string) #The Dormouse's story ...... #The Dormouse's story
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 #, .. .
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.
tìm_all()
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ạisú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 #[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 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 đó.
Nhãnsú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.
trượt = BeautifulSoup(html_doc, 'lxml') cho thẻ trong siêu nhỏ.find_all(['a', 'b']): print(tag.name) #b #a #a #a #b
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.
khóa='từ'
Truyền tham sốLớp = BeautifulSoup(html_doc, 'lxml') print(soup.find_all(id='link1')) #[Elsie]
Python
củaghi chú Re
Biể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ơntrượ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á"]
Trợ giúp tốt đẹp
sẽ phù hợp với bất kỳ giá trị nào trong danh sáchtrượ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 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ọc
tài sảndata-*
: use for match optiondata-*
tài sảnCuố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 và
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.
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']
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"]
Cuốn = BeautifulSoup(html_doc, 'lxml') print(soup.find_all(string=['Elsie', 'Lacie', 'Tillie'])) #['Elsie', 'Lacie', 'Tillie']
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 ]
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ấtXô = 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
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.
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().
súp = BeautifulSoup(html_doc, 'lxml') print(soup.select('b')) #[Câu chuyện của chú chuột Dormouse, ]
súp = BeautifulSoup(html_doc, 'lxml') print(soup.select('.title')) #[Câu chuyện về chú chuột Dormouse
]
súp = BeautifulSoup(html_doc, 'lxml') print(soup.select('#link1')) #[ Elsie]
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]
súp = BeautifulSoup(html_doc, 'lxml') print(soup.select('.story#text'))
súp = BeautifulSoup(html_doc, 'lxml') print(soup.select(".story .sister#link1")) #[Elsie]
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.
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ể.
[thuộc tính="giá trị"]
[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ể.[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ể[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ể.[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! .
1. Có loại lệnh điều khiển chính luồng bốn loại: if, ii...else, elseif (đôi khi nó cũng có thể được viết là else if) và switch. Lệnh trong PHP là: if (điều kiện được đáp ứng) {câu lệnh thực thi} if (điều kiện được đáp ứng) {thực thi
Mục lục Các khái niệm sơ bộ về DFS Ví dụ DFS - Trò chơi mê cung Câu hỏi Mô tả Định dạng đầu vào và đầu ra Ví dụ đầu vào và đầu ra
Câu hỏi này đã được hỏi cách đây hai năm nhưng các tài nguyên mà nó đề không hữu ích lắm (IMHO) hoặc các liên kết không vẫn còn hoạt động. Phải có một số hướng dẫn hay để hiểu Phaser.
Câu hỏi này đã được hỏi cách đây hai năm nhưng các tài nguyên mà nó đề không hữu ích lắm (IMHO) hoặc các liên kết không vẫn còn hoạt động. Phải có một số hướng dẫn hay để hiểu Phaser.
Regex này xuất bản phát hiện từ trang web này http://www.regexlab.com/zh/regref.htm Chuyển tiếp tìm kiếm trước: "(?=xxxxx)", "(?!xxxxx)"
chr(9), chr(10), chr(13), chr(32), chr(34) Tất cả các bảng về mã ASCII: [url]http://www.asciitable.com/[/url] chr (13)
Tôi là một lập trình viên xuất sắc, rất xuất sắc!