Bạn không nên sử dụng regexes trên HTML. Bạn nên sử dụng BeautifulSoup hoặc LXML. Dưới đây là một số ví dụ sử dụng đẹp:
Thẻ TD của bạn thực sự trông như thế này:
newline
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
Hoặc chính xác hơn:
for td in tds:
print[re.sub["\n+", ",", td.text.lstrip[] ] ]
--output:--
some link,some data 1,some data 2,some data 3
Nhưng giải pháp đó là giòn vì nó sẽ không hoạt động nếu HTML của bạn trông như thế này:
some link
some data 1
some data 2
some data 3
Bây giờ td.text trông như thế này:
some linksome data 1some data2some data3
Và không có cách nào để tìm ra nơi một số chuỗi bắt đầu và kết thúc. Nhưng điều đó chỉ có nghĩa là bạn không thể sử dụng td.text-vẫn còn những cách khác để xác định từng chuỗi:
1]
from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
a_tags = td.find_all['a']
for a_tag in a_tags:
csv_data.append[a_tag.text]
br_tags = a_tag.findNextSiblings['br']
for br in br_tags:
csv_data.append[br.next.strip[]] #get the element after the
tag
csv_str = ",".join[csv_data]
print[csv_str]
--output:--
some link,some data 1,some data 2,some data 3
2]
for td in tds:
a_tag = td.find['a']
if a_tag: csv_data.append[a_tag.text]
for string in a_tag.findNextSiblings[text=True]: #find only text nodes
string = string.strip[]
if string: csv_data.append[string]
csv_str = ",".join[csv_data]
print[csv_str]
--output:--
some link,some data 1,some data 2,some data 3
3]
for td in tds:
a_tag = td.find['a']
if a_tag: csv_data.append[a_tag.text]
text_strings = a_tag.findNextSiblings[ text=re.compile['\S+'] ] #find only non-whitespace text nodes
csv_data.extend[text_strings]
csv_str = ",".join[csv_data]
print[csv_str]
--output:--
some link,some data 1,some data 2,some data 3
Mô -đun đẹp trong Python cho phép chúng tôi xóa dữ liệu từ các tệp HTML cục bộ. Vì một số lý do, các trang trang web có thể được lưu trữ trong một địa phương [môi trường ngoại tuyến] và bất cứ khi nào cần, có thể có các yêu cầu để lấy dữ liệu từ chúng. Đôi khi cũng có thể nhận được dữ liệu từ nhiều tệp HTML được lưu trữ cục bộ. Thông thường các tệp HTML có các thẻ như,, các thẻ, v.v., sử dụng đẹp, chúng ta có thể loại bỏ nội dung và nhận các chi tiết cần thiết. & NBSP;module in Python allows us to scrape data from local HTML files. For some reason, website pages might get stored in a local [offline environment], and whenever in need, there may be requirements to get the data from them. Sometimes there may be a need to get data from multiple Locally stored HTML files too. Usually HTML files got the tags like
, ,…
,
Cài đặt
Nó có thể được cài đặt bằng cách nhập lệnh dưới đây vào thiết bị đầu cuối.
pip install beautifulsoup4
Bắt đầu
Nếu có một tệp HTML được lưu trữ ở một vị trí và chúng ta cần loại bỏ nội dung thông qua Python bằng cách sử dụng đẹp, LXML là một API tuyệt vời vì nó có nghĩa là để phân tích XML và HTML. Nó hỗ trợ cả phân tích cú pháp một bước và phân tích cú pháp từng bước. & Nbsp; lxml is a great API as it meant for parsing XML and HTML. It supports both one-step parsing and step-by-step parsing.
Hàm preptify [] trong BeautifulSoup giúp xem bản chất thẻ và việc làm tổ của chúng. & Nbsp;Prettify[] function in BeautifulSoup helps to view the tag nature and their nesting.
Ví dụ: Hãy để tạo ra một tệp HTML mẫu.Let’s create a sample HTML file.
Python3
some linksome data 1some data 2some data 3
0 some linksome data 1some data 2some data 3
1some linksome data 1some data 2some data 3
0 some linksome data 1some data 2some data 3
3some linksome data 1some data 2some data 3
4some linksome data 1some data 2some data 3
5 some linksome data 1some data 2some data 3
6some linksome data 1some data 2some data 3
7some linksome data 1some data 2some data 3
8some linksome data 1some data 2some data 3
5 from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
0from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
1from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
2from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
3from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
4from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
5from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
6from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
7some linksome data 1some data 2some data 3
7from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
9some linksome data 1some data 2some data 3
5 for td in tds:
print[re.sub["\n+", ",", td.text.lstrip[] ] ]
--output:--
some link,some data 1,some data 2,some data 3
1some linksome data 1some data 2some data 3
7for td in tds:
print[re.sub["\n+", ",", td.text.lstrip[] ] ]
--output:--
some link,some data 1,some data 2,some data 3
3for td in tds:
print[re.sub["\n+", ",", td.text.lstrip[] ] ]
--output:--
some link,some data 1,some data 2,some data 3
4some linksome data 1some data 2some data 3
7from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
9some linksome data 1some data 2some data 3
5 for td in tds:
print[re.sub["\n+", ",", td.text.lstrip[] ] ]
--output:--
some link,some data 1,some data 2,some data 3
8Output:
some link
some data 1
some data 2
some data 3
0
some linksome data 1some data 2some data 3
0
some link
some data 1
some data 2
some data 3
2
some link
some data 1
some data 2
some data 3
3some linksome data 1some data 2some data 3
5 from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
2from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
3
some link
some data 1
some data 2
some data 3
7from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
5
some link
some data 1
some data 2
some data 3
9some linksome data 1some data2some data3
0some linksome data 1some data2some data3
1some linksome data 1some data 2some data 3
5 some linksome data 1some data2some data3
3some linksome data 1some data2some data3
4some linksome data 1some data 2some data 3
5 some linksome data 1some data2some data3
6some linksome data 1some data2some data3
7some linksome data 1some data2some data3
0for td in tds:
print[re.sub["\n+", ",", td.text.lstrip[] ] ]
--output:--
some link,some data 1,some data 2,some data 3
3from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
a_tags = td.find_all['a']
for a_tag in a_tags:
csv_data.append[a_tag.text]
br_tags = a_tag.findNextSiblings['br']
for br in br_tags:
csv_data.append[br.next.strip[]] #get the element after the
tag
csv_str = ",".join[csv_data]
print[csv_str]
--output:--
some link,some data 1,some data 2,some data 3
0Đầu ra: & nbsp;
//media.geeksforgeeks.org/wp-content/uploads/20210419123712/gfg-priyaraj-article-page-scraped-to-offline-mode-html-and-printing-in-console.mp4
Theo cách này có thể nhận được dữ liệu HTML. Bây giờ thực hiện một số hoạt động và một số sâu sắc trong dữ liệu.
Ví dụ 1:
Chúng ta có thể sử dụng các phương thức find [] và khi nội dung HTML thay đổi một cách linh hoạt, chúng ta có thể không biết tên thẻ chính xác. Trong thời gian đó, chúng ta có thể sử dụng Findall [đúng] để lấy tên thẻ trước, và sau đó chúng ta có thể thực hiện bất kỳ loại thao tác nào. Ví dụ: lấy tên thẻ và độ dài của thẻ
Python3
for td in tds:
print[re.sub["\n+", ",", td.text.lstrip[] ] ]
--output:--
some link,some data 1,some data 2,some data 3
9
some link
some data 1
some data 2
some data 3
0some linksome data 1some data 2some data 3
0
some link
some data 1
some data 2
some data 3
2
some link
some data 1
some data 2
some data 3
3some linksome data 1some data 2some data 3
5 from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
2from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
3
some link
some data 1
some data 2
some data 3
7from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
5
some link
some data 1
some data 2
some data 3
9some linksome data 1some data2some data3
0some linksome data 1some data2some data3
1some linksome data 1some data 2some data 3
5 some linksome data 1some data2some data3
3some linksome data 1some data2some data3
4some linksome data 1some data 2some data 3
5 some linksome data 1some data2some data3
6some linksome data 1some data2some data3
7some linksome data 1some data2some data3
0Đầu ra: & nbsp;
some linksome data 1some data 2some data 3
7for td in tds:
print[re.sub["\n+", ",", td.text.lstrip[] ] ]
--output:--
some link,some data 1,some data 2,some data 3
3for td in tds:
a_tag = td.find['a']
if a_tag: csv_data.append[a_tag.text]
text_strings = a_tag.findNextSiblings[ text=re.compile['\S+'] ] #find only non-whitespace text nodes
csv_data.extend[text_strings]
csv_str = ",".join[csv_data]
print[csv_str]
--output:--
some link,some data 1,some data 2,some data 3
9pip install beautifulsoup40
from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
5pip install beautifulsoup42
pip install beautifulsoup43
Output:
//media.geeksforgeeks.org/wp-content/uploads/20210419124258/gfg-scraped-data-and-get-the-tag-names-and-length.mp4
Theo cách này có thể nhận được dữ liệu HTML. Bây giờ thực hiện một số hoạt động và một số sâu sắc trong dữ liệu.
Ví dụ 1:
Chúng ta có thể sử dụng các chức năng mô -đun của OS OS. Hãy để chúng tôi lấy thư mục hiện tại tất cả các tệp HTML cho các ví dụ của chúng tôi
some link
some data 1
some data 2
some data 3
0
some linksome data 1some data 2some data 3
0
some link
some data 1
some data 2
some data 3
2some linksome data 1some data 2some data 3
00some linksome data 1some data 2some data 3
5 some linksome data 1some data 2some data 3
02for td in tds:
a_tag = td.find['a']
if a_tag: csv_data.append[a_tag.text]
text_strings = a_tag.findNextSiblings[ text=re.compile['\S+'] ] #find only non-whitespace text nodes
csv_data.extend[text_strings]
csv_str = ",".join[csv_data]
print[csv_str]
--output:--
some link,some data 1,some data 2,some data 3
1 some linksome data 1some data 2some data 3
04for td in tds:
a_tag = td.find['a']
if a_tag: csv_data.append[a_tag.text]
text_strings = a_tag.findNextSiblings[ text=re.compile['\S+'] ] #find only non-whitespace text nodes
csv_data.extend[text_strings]
csv_str = ",".join[csv_data]
print[csv_str]
--output:--
some link,some data 1,some data 2,some data 3
3 some linksome data 1some data 2some data 3
06some linksome data 1some data 2some data 3
7some linksome data 1some data 2some data 3
08 some linksome data 1some data 2some data 3
09some linksome data 1some data 2some data 3
10for td in tds:
a_tag = td.find['a']
if a_tag: csv_data.append[a_tag.text]
text_strings = a_tag.findNextSiblings[ text=re.compile['\S+'] ] #find only non-whitespace text nodes
csv_data.extend[text_strings]
csv_str = ",".join[csv_data]
print[csv_str]
--output:--
some link,some data 1,some data 2,some data 3
6some linksome data 1some data 2some data 3
12some linksome data 1some data 2some data 3
13some linksome data 1some data 2some data 3
5 some linksome data 1some data 2some data 3
15some linksome data 1some data 2some data 3
12for td in tds:
print[re.sub["\n+", ",", td.text.lstrip[] ] ]
--output:--
some link,some data 1,some data 2,some data 3
3from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
3some linksome data 1some data 2some data 3
19some linksome data 1some data 2some data 3
20some linksome data 1some data 2some data 3
12from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
1from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
2some linksome data 1some data 2some data 3
24some linksome data 1some data 2some data 3
25some linksome data 1some data 2some data 3
26some linksome data 1some data 2some data 3
27some linksome data 1some data 2some data 3
28some linksome data 1some data 2some data 3
29some linksome data 1some data2some data3
4some linksome data 1some data 2some data 3
5 some linksome data 1some data 2some data 3
32some linksome data 1some data 2some data 3
27some linksome data 1some data 2some data 3
34some linksome data 1some data 2some data 3
35some linksome data 1some data2some data3
0Các
some linksome data 1some data 2some data 3
44for td in tds:
print[re.sub["\n+", ",", td.text.lstrip[] ] ]
--output:--
some link,some data 1,some data 2,some data 3
3for td in tds:
a_tag = td.find['a']
if a_tag: csv_data.append[a_tag.text]
text_strings = a_tag.findNextSiblings[ text=re.compile['\S+'] ] #find only non-whitespace text nodes
csv_data.extend[text_strings]
csv_str = ",".join[csv_data]
print[csv_str]
--output:--
some link,some data 1,some data 2,some data 3
9pip install beautifulsoup40
from bs4 import BeautifulSoup as bs
import re
html = """
some link
some data 1
some data 2
some data 3 """
soup = bs[html]
tds = soup.find_all['td']
csv_data = []
for td in tds:
inner_text = td.text
strings = inner_text.split["\n"]
csv_data.extend[[string for string in strings if string]]
print[",".join[csv_data]]
--output:--
some link,some data 1,some data 2,some data 3
5pip install beautifulsoup42
pip install beautifulsoup43
Output:
//media.geeksforgeeks.org/wp-content/uploads/20210419125444/gfg-scraping-multiple-files.mp4