Hướng dẫn how do i read html files in beautifulsoup? - làm cách nào để đọc các tệp html trong beautifulsoup?

Tôi đang sử dụng Python 2.7 + BeautifulSoup 4.3.2.

Tôi đang cố gắng sử dụng Python và BeautifulSoup để chọn thông tin trên trang web. Vì trang web nằm trong trang web của công ty và yêu cầu đăng nhập và chuyển hướng, tôi đã sao chép trang mã nguồn của trang đích vào một tệp và lưu nó dưới dạng ví dụ.html, trong C: \ để thuận tiện cho việc thực hành.

Đây là một phần của mã gốc:

<tr class="ghj">
    <td><span class="city-sh"><sh src="./citys/1.jpg" alt="boy" title="boy" /></span><a href="./membercity.php?mode=view&amp;u=12563">port_new_cape</a></td>
    <td class="position"><a href="./search.php?id=12563&amp;sr=positions" title="Search positions">452</a></td>
    <td class="details"><div>South</div></td>
    <td>May 09, 1997</td>
    <td>Jan 23, 2009 12:05 pm&nbsp;</td>
</tr>

Mã tôi đã làm cho đến nay là:

from bs4 import BeautifulSoup
import re
import urllib2

url = "C:\example.html"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

cities = soup.find_all('span', {'class' : 'city-sh'})

for city in cities:
print city

Đây chỉ là giai đoạn đầu tiên của thử nghiệm, vì vậy nó hơi không đầy đủ.

Tuy nhiên, khi tôi chạy nó, nó cung cấp một thông báo lỗi. Có vẻ như nó không đúng khi sử dụng


from bs4 import BeautifulSoup


 with open('files/file1.html') as f:
    #read File
    content = f.read()
    #parse HTML
    soup = BeautifulSoup(content, 'html.parser')
    #print Title tag
    print(soup.title)      

6 để mở một tệp cục bộ.

 Traceback (most recent call last):
   File "C:\Python27\Testing.py", line 8, in <module>
     page = urllib2.urlopen(url)
   File "C:\Python27\lib\urllib2.py", line 127, in urlopen
     return _opener.open(url, data, timeout)
   File "C:\Python27\lib\urllib2.py", line 404, in open
     response = self._open(req, data)
   File "C:\Python27\lib\urllib2.py", line 427, in _open
     'unknown_open', req)
   File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
     result = func(*args)
   File "C:\Python27\lib\urllib2.py", line 1247, in unknown_open
     raise URLError('unknown url type: %s' % type)
 URLError: <urlopen error unknown url type: c>

Làm thế nào tôi có thể thực hành bằng cách sử dụng một tệp cục bộ?

  • Unknown.PY
  • Ngày 28 tháng 4 năm 2021

Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách phân tích tệp HTML và nhiều tệp bằng thư viện đẹp.HTML file and multiple files using the Beautifulsoup library.

Nếu bạn không biết thư viện đẹp, hãy xem tài liệu đẹp.Beautifulsoup library, take a look at Beautifulsoup documentation.

Phân tích một tập tin sử dụng đẹp

Để phân tích tệp HTML trong Python, chúng ta cần làm theo các bước sau:

  1. Mở tệp tin
  2. Phân tích các tập tin

Trong tình huống của tôi, tôi có File1.html chứa nội dung HTML.file1.html that contains HTML content.

Trong mã sau, chúng tôi sẽ mở file1.html sau đó nhận thẻ tiêu đề.file1.html then get the title tag.


from bs4 import BeautifulSoup


 with open('files/file1.html') as f:
    #read File
    content = f.read()
    #parse HTML
    soup = BeautifulSoup(content, 'html.parser')
    #print Title tag
    print(soup.title)      

Output:

<title>pytutorial | The Simplest Python and Django Tutorials</title>

Như bạn có thể thấy, chúng tôi đã sử dụng phương thức Open ().with open() method.

Bây giờ chúng ta hãy làm điều tương tự bằng phương thức Open ().open() method.


f = open('file.html')
content = f.read()
#parse HTML
soup = BeautifulSoup(content, 'html.parser')
#print Title tag
print(soup.title)

Output:

<title>pytutorial | The Simplest Python and Django Tutorials</title>

Phân tích nhiều tệp sử dụng BeautifulSoup và Glob

Để phân tích các tệp của một thư mục, chúng ta cần sử dụng mô -đun GLOB.glob module.

Với mô -đun này, chúng ta có thể truy xuất các tệp/tên đường dẫn khớp với một mẫu được chỉ định.

Trong mã sau, chúng tôi sẽ nhận được thẻ tiêu đề từ tất cả các tệp HTML.

       
import glob

files = glob.glob('files/*.html')

for fi in files:
    with open(fi) as f:
        content = f.read()
        soup = BeautifulSoup(content, 'html.parser')
        print(soup.title)
        

Output:

   
<title>Google</title>
<title>Flavio Copes</title>
<title>pytutorial | The Simplest Python and Django Tutorials</title> 

Giới thiệu

Quét web đang thu thập thông tin theo chương trình từ các trang web khác nhau. Mặc dù có nhiều thư viện và khung trong các ngôn ngữ khác nhau có thể trích xuất dữ liệu web, Python từ lâu đã là một lựa chọn phổ biến vì rất nhiều tùy chọn để quét web.

Bài viết này sẽ cung cấp cho bạn một khóa học về sự cố trên web trong Python với súp đẹp - một thư viện Python nổi tiếng để phân tích HTML và XML.

Xóa web đạo đức

Quét web có mặt khắp nơi và cung cấp cho chúng tôi dữ liệu như chúng tôi sẽ nhận được với API. Tuy nhiên, là những công dân tốt của Internet, trách nhiệm của chúng tôi là tôn trọng các chủ sở hữu trang web mà chúng tôi cào. Dưới đây là một số nguyên tắc mà một người cạo web nên tuân thủ:

  • Đừng yêu cầu nội dung bị loại bỏ là của riêng chúng tôi. Chủ sở hữu trang web đôi khi dành một lượng thời gian dài để tạo ra các bài báo, thu thập chi tiết về sản phẩm hoặc thu hoạch nội dung khác. Chúng ta phải tôn trọng lao động và độc đáo của họ.
  • Đừng cạo một trang web không muốn được cạo. Các trang web đôi khi đi kèm với một tệp
    
    from bs4 import BeautifulSoup
    
    
     with open('files/file1.html') as f:
        #read File
        content = f.read()
        #parse HTML
        soup = BeautifulSoup(content, 'html.parser')
        #print Title tag
        print(soup.title)      
    
    
    7 - xác định các phần của trang web có thể được xóa. Nhiều trang web cũng có một điều khoản sử dụng có thể không cho phép cạo. Chúng ta phải tôn trọng các trang web không muốn được cạo.
  • Có API có sẵn không? Lộng lẫy, không cần chúng tôi viết một cái cào. API được tạo để cung cấp quyền truy cập vào dữ liệu theo cách được kiểm soát theo định nghĩa của chủ sở hữu dữ liệu. Chúng tôi thích sử dụng API nếu chúng có sẵn.
  • Thực hiện yêu cầu đến một trang web có thể gây ra một khoản phí cho hiệu suất của trang web. Một cái cào web thực hiện quá nhiều yêu cầu có thể bị suy nhược như một cuộc tấn công DDoS. Chúng tôi phải cạo có trách nhiệm để chúng tôi không gây ra bất kỳ sự gián đoạn nào đối với hoạt động thường xuyên của trang web.

Tổng quan về món súp đẹp

Nội dung HTML của các trang web có thể được phân tích cú pháp và cạo bằng súp đẹp. Trong phần sau, chúng tôi sẽ bao gồm các chức năng hữu ích cho việc xóa các trang web.

Điều làm cho súp đẹp trở nên hữu ích là vô số chức năng mà nó cung cấp để trích xuất dữ liệu từ HTML. Hình ảnh này dưới đây minh họa một số chức năng chúng ta có thể sử dụng:

Hãy thực hành và xem làm thế nào chúng ta có thể phân tích HTML với súp đẹp. Xem xét trang HTML sau được lưu vào tệp là


from bs4 import BeautifulSoup


 with open('files/file1.html') as f:
    #read File
    content = f.read()
    #parse HTML
    soup = BeautifulSoup(content, 'html.parser')
    #print Title tag
    print(soup.title)      

8:

<html>
<head>
  <title>Head's title</title>
</head>

<body>
  <p class="title"><b>Body's title</b></p>
  <p class="story">line begins
    <a href="http://example.com/element1" class="element" id="link1">1</a>
    <a href="http://example.com/element2" class="element" id="link2">2</a>
    <a href="http://example.com/avatar1" class="avatar" id="link3">3</a>
  <p> line ends</p>
</body>
</html>

Các đoạn mã sau đây được kiểm tra trên


from bs4 import BeautifulSoup


 with open('files/file1.html') as f:
    #read File
    content = f.read()
    #parse HTML
    soup = BeautifulSoup(content, 'html.parser')
    #print Title tag
    print(soup.title)      

9. Bạn có thể cài đặt mô -đun
<title>pytutorial | The Simplest Python and Django Tutorials</title>
0 bằng cách nhập lệnh sau vào thiết bị đầu cuối:

from bs4 import BeautifulSoup
import re
import urllib2

url = "C:\example.html"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

cities = soup.find_all('span', {'class' : 'city-sh'})

for city in cities:
print city
0

Tệp HTML


from bs4 import BeautifulSoup


 with open('files/file1.html') as f:
    #read File
    content = f.read()
    #parse HTML
    soup = BeautifulSoup(content, 'html.parser')
    #print Title tag
    print(soup.title)      

8 cần được chuẩn bị. Điều này được thực hiện bằng cách chuyển tệp cho hàm tạo
<title>pytutorial | The Simplest Python and Django Tutorials</title>
0, chúng ta hãy sử dụng Shell Python tương tác cho việc này, vì vậy chúng ta có thể in ngay nội dung của một phần cụ thể của một trang:

from bs4 import BeautifulSoup
import re
import urllib2

url = "C:\example.html"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

cities = soup.find_all('span', {'class' : 'city-sh'})

for city in cities:
print city
1

Bây giờ chúng tôi có thể sử dụng súp đẹp để điều hướng trang web của chúng tôi và trích xuất dữ liệu.

Điều hướng đến các thẻ cụ thể

Từ đối tượng súp được tạo trong phần trước, hãy lấy thẻ tiêu đề của


from bs4 import BeautifulSoup


 with open('files/file1.html') as f:
    #read File
    content = f.read()
    #parse HTML
    soup = BeautifulSoup(content, 'html.parser')
    #print Title tag
    print(soup.title)      

8:

from bs4 import BeautifulSoup
import re
import urllib2

url = "C:\example.html"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

cities = soup.find_all('span', {'class' : 'city-sh'})

for city in cities:
print city
2

Đây là sự cố của từng thành phần chúng tôi đã sử dụng để có được tiêu đề:

Súp đẹp rất mạnh mẽ vì các đối tượng Python của chúng ta phù hợp với cấu trúc lồng nhau của tài liệu HTML mà chúng ta đang cạo.

Để nhận văn bản của thẻ

<title>pytutorial | The Simplest Python and Django Tutorials</title>
4 đầu tiên, hãy nhập cái này:

from bs4 import BeautifulSoup
import re
import urllib2

url = "C:\example.html"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

cities = soup.find_all('span', {'class' : 'city-sh'})

for city in cities:
print city
3

Để có được tiêu đề trong thẻ cơ thể của HTML (được biểu thị bằng lớp "Tiêu đề"), hãy nhập các loại sau trong thiết bị đầu cuối của bạn:

from bs4 import BeautifulSoup
import re
import urllib2

url = "C:\example.html"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

cities = soup.find_all('span', {'class' : 'city-sh'})

for city in cities:
print city
4

Đối với các tài liệu HTML được lồng sâu, điều hướng có thể nhanh chóng trở nên tẻ nhạt. May mắn thay, súp đẹp đi kèm với chức năng tìm kiếm vì vậy chúng tôi không phải điều hướng để lấy các yếu tố HTML.

Tìm kiếm các yếu tố của thẻ

Phương thức

<title>pytutorial | The Simplest Python and Django Tutorials</title>
5 lấy thẻ HTML làm đối số chuỗi và trả về danh sách các phần tử khớp với thẻ được cung cấp. Ví dụ: nếu chúng ta muốn tất cả các thẻ
<title>pytutorial | The Simplest Python and Django Tutorials</title>
6 trong

from bs4 import BeautifulSoup


 with open('files/file1.html') as f:
    #read File
    content = f.read()
    #parse HTML
    soup = BeautifulSoup(content, 'html.parser')
    #print Title tag
    print(soup.title)      

8:

from bs4 import BeautifulSoup
import re
import urllib2

url = "C:\example.html"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

cities = soup.find_all('span', {'class' : 'city-sh'})

for city in cities:
print city
5

Chúng ta sẽ thấy danh sách các thẻ

<title>pytutorial | The Simplest Python and Django Tutorials</title>
6 này làm đầu ra:

from bs4 import BeautifulSoup
import re
import urllib2

url = "C:\example.html"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

cities = soup.find_all('span', {'class' : 'city-sh'})

for city in cities:
print city
6

Dưới đây là sự cố của từng thành phần chúng tôi sử dụng để tìm kiếm thẻ:

Chúng tôi có thể tìm kiếm các thẻ của một lớp cụ thể bằng cách cung cấp đối số

<title>pytutorial | The Simplest Python and Django Tutorials</title>
9. Súp đẹp sử dụng
<title>pytutorial | The Simplest Python and Django Tutorials</title>
9 vì

f = open('file.html')
content = f.read()
#parse HTML
soup = BeautifulSoup(content, 'html.parser')
#print Title tag
print(soup.title)
1 là một từ khóa dành riêng trong Python. Hãy tìm kiếm tất cả các thẻ
<title>pytutorial | The Simplest Python and Django Tutorials</title>
6 có lớp "phần tử":

from bs4 import BeautifulSoup
import re
import urllib2

url = "C:\example.html"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

cities = soup.find_all('span', {'class' : 'city-sh'})

for city in cities:
print city
7

Vì chúng tôi chỉ có hai liên kết với lớp "Phần tử", bạn sẽ thấy đầu ra này:

from bs4 import BeautifulSoup
import re
import urllib2

url = "C:\example.html"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

cities = soup.find_all('span', {'class' : 'city-sh'})

for city in cities:
print city
8

Điều gì sẽ xảy ra nếu chúng ta muốn tìm nạp các liên kết được nhúng bên trong các thẻ

<title>pytutorial | The Simplest Python and Django Tutorials</title>
6? Chúng ta hãy truy xuất thuộc tính

f = open('file.html')
content = f.read()
#parse HTML
soup = BeautifulSoup(content, 'html.parser')
#print Title tag
print(soup.title)
4 của liên kết bằng tùy chọn

f = open('file.html')
content = f.read()
#parse HTML
soup = BeautifulSoup(content, 'html.parser')
#print Title tag
print(soup.title)
5. Nó hoạt động giống như
<title>pytutorial | The Simplest Python and Django Tutorials</title>
5 nhưng nó trả về phần tử phù hợp đầu tiên thay vì danh sách. Nhập cái này vào vỏ của bạn:

from bs4 import BeautifulSoup
import re
import urllib2

url = "C:\example.html"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

cities = soup.find_all('span', {'class' : 'city-sh'})

for city in cities:
print city
9

Các hàm


f = open('file.html')
content = f.read()
#parse HTML
soup = BeautifulSoup(content, 'html.parser')
#print Title tag
print(soup.title)
5 và
<title>pytutorial | The Simplest Python and Django Tutorials</title>
5 cũng chấp nhận biểu thức chính quy thay vì chuỗi. Đằng sau hậu trường, văn bản sẽ được lọc bằng phương pháp

f = open('file.html')
content = f.read()
#parse HTML
soup = BeautifulSoup(content, 'html.parser')
#print Title tag
print(soup.title)
9 biểu thức được biên dịch. Ví dụ:

 Traceback (most recent call last):
   File "C:\Python27\Testing.py", line 8, in <module>
     page = urllib2.urlopen(url)
   File "C:\Python27\lib\urllib2.py", line 127, in urlopen
     return _opener.open(url, data, timeout)
   File "C:\Python27\lib\urllib2.py", line 404, in open
     response = self._open(req, data)
   File "C:\Python27\lib\urllib2.py", line 427, in _open
     'unknown_open', req)
   File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
     result = func(*args)
   File "C:\Python27\lib\urllib2.py", line 1247, in unknown_open
     raise URLError('unknown url type: %s' % type)
 URLError: <urlopen error unknown url type: c>
0

Danh sách khi lặp lại, tìm nạp các thẻ bắt đầu bằng ký tự

<title>pytutorial | The Simplest Python and Django Tutorials</title>
0 bao gồm
<title>pytutorial | The Simplest Python and Django Tutorials</title>
1 và
<title>pytutorial | The Simplest Python and Django Tutorials</title>
2:

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

 Traceback (most recent call last):
   File "C:\Python27\Testing.py", line 8, in <module>
     page = urllib2.urlopen(url)
   File "C:\Python27\lib\urllib2.py", line 127, in urlopen
     return _opener.open(url, data, timeout)
   File "C:\Python27\lib\urllib2.py", line 404, in open
     response = self._open(req, data)
   File "C:\Python27\lib\urllib2.py", line 427, in _open
     'unknown_open', req)
   File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
     result = func(*args)
   File "C:\Python27\lib\urllib2.py", line 1247, in unknown_open
     raise URLError('unknown url type: %s' % type)
 URLError: <urlopen error unknown url type: c>
1

Chúng tôi đã đề cập đến các cách phổ biến nhất để nhận thẻ và thuộc tính của chúng. Đôi khi, đặc biệt là đối với các trang web ít năng động hơn, chúng tôi chỉ muốn văn bản từ nó. Hãy xem làm thế nào chúng ta có thể có được nó!

Nhận toàn bộ văn bản

Hàm

<title>pytutorial | The Simplest Python and Django Tutorials</title>
3 lấy tất cả các văn bản từ tài liệu HTML. Hãy lấy tất cả văn bản của tài liệu HTML:

 Traceback (most recent call last):
   File "C:\Python27\Testing.py", line 8, in <module>
     page = urllib2.urlopen(url)
   File "C:\Python27\lib\urllib2.py", line 127, in urlopen
     return _opener.open(url, data, timeout)
   File "C:\Python27\lib\urllib2.py", line 404, in open
     response = self._open(req, data)
   File "C:\Python27\lib\urllib2.py", line 427, in _open
     'unknown_open', req)
   File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
     result = func(*args)
   File "C:\Python27\lib\urllib2.py", line 1247, in unknown_open
     raise URLError('unknown url type: %s' % type)
 URLError: <urlopen error unknown url type: c>
2

Đầu ra của bạn sẽ như thế này:

 Traceback (most recent call last):
   File "C:\Python27\Testing.py", line 8, in <module>
     page = urllib2.urlopen(url)
   File "C:\Python27\lib\urllib2.py", line 127, in urlopen
     return _opener.open(url, data, timeout)
   File "C:\Python27\lib\urllib2.py", line 404, in open
     response = self._open(req, data)
   File "C:\Python27\lib\urllib2.py", line 427, in _open
     'unknown_open', req)
   File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
     result = func(*args)
   File "C:\Python27\lib\urllib2.py", line 1247, in unknown_open
     raise URLError('unknown url type: %s' % type)
 URLError: <urlopen error unknown url type: c>
3

Đôi khi các ký tự mới được in, vì vậy đầu ra của bạn cũng có thể trông giống như thế này:

 Traceback (most recent call last):
   File "C:\Python27\Testing.py", line 8, in <module>
     page = urllib2.urlopen(url)
   File "C:\Python27\lib\urllib2.py", line 127, in urlopen
     return _opener.open(url, data, timeout)
   File "C:\Python27\lib\urllib2.py", line 404, in open
     response = self._open(req, data)
   File "C:\Python27\lib\urllib2.py", line 427, in _open
     'unknown_open', req)
   File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
     result = func(*args)
   File "C:\Python27\lib\urllib2.py", line 1247, in unknown_open
     raise URLError('unknown url type: %s' % type)
 URLError: <urlopen error unknown url type: c>
4

Bây giờ chúng ta có cảm giác về cách sử dụng súp đẹp, hãy cạo một trang web!

Súp đẹp trong hành động - Quét danh sách sách

Bây giờ chúng tôi đã thành thạo các thành phần của súp đẹp, đã đến lúc phải học cách sử dụng. Hãy xây dựng một cạp để trích xuất dữ liệu từ https://books.toscrape.com/ và lưu nó vào tệp CSV. Trang web chứa dữ liệu ngẫu nhiên về sách và là một không gian tuyệt vời để kiểm tra các kỹ thuật quét web của bạn.

Đầu tiên, tạo một tệp mới có tên

<title>pytutorial | The Simplest Python and Django Tutorials</title>
4. Hãy nhập tất cả các thư viện mà chúng tôi cần cho tập lệnh này:

 Traceback (most recent call last):
   File "C:\Python27\Testing.py", line 8, in <module>
     page = urllib2.urlopen(url)
   File "C:\Python27\lib\urllib2.py", line 127, in urlopen
     return _opener.open(url, data, timeout)
   File "C:\Python27\lib\urllib2.py", line 404, in open
     response = self._open(req, data)
   File "C:\Python27\lib\urllib2.py", line 427, in _open
     'unknown_open', req)
   File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
     result = func(*args)
   File "C:\Python27\lib\urllib2.py", line 1247, in unknown_open
     raise URLError('unknown url type: %s' % type)
 URLError: <urlopen error unknown url type: c>
5

Trong các mô -đun được đề cập ở trên:

  • <title>pytutorial | The Simplest Python and Django Tutorials</title>
    
    5 - Thực hiện yêu cầu URL và tìm kiếm HTML của trang web
  • <title>pytutorial | The Simplest Python and Django Tutorials</title>
    
    6 - Giới hạn số lần chúng tôi cạo trang
  • <title>pytutorial | The Simplest Python and Django Tutorials</title>
    
    7 - Giúp chúng tôi xuất dữ liệu được quét vào tệp CSV
  • <title>pytutorial | The Simplest Python and Django Tutorials</title>
    
    8 - Cho phép chúng tôi viết các biểu thức chính quy sẽ có ích để chọn văn bản dựa trên mẫu của nó
  • <title>pytutorial | The Simplest Python and Django Tutorials</title>
    
    9 - của bạn thực sự, mô -đun cạo để phân tích HTML

Bạn sẽ có

<title>pytutorial | The Simplest Python and Django Tutorials</title>
9 đã được cài đặt và
<title>pytutorial | The Simplest Python and Django Tutorials</title>
6,
<title>pytutorial | The Simplest Python and Django Tutorials</title>
7 và
<title>pytutorial | The Simplest Python and Django Tutorials</title>
8 là các gói tích hợp trong Python. Bạn sẽ cần cài đặt mô -đun
<title>pytutorial | The Simplest Python and Django Tutorials</title>
5 trực tiếp như thế này:

 Traceback (most recent call last):
   File "C:\Python27\Testing.py", line 8, in <module>
     page = urllib2.urlopen(url)
   File "C:\Python27\lib\urllib2.py", line 127, in urlopen
     return _opener.open(url, data, timeout)
   File "C:\Python27\lib\urllib2.py", line 404, in open
     response = self._open(req, data)
   File "C:\Python27\lib\urllib2.py", line 427, in _open
     'unknown_open', req)
   File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
     result = func(*args)
   File "C:\Python27\lib\urllib2.py", line 1247, in unknown_open
     raise URLError('unknown url type: %s' % type)
 URLError: <urlopen error unknown url type: c>
6

Trước khi bạn bắt đầu, bạn cần hiểu cách cấu trúc HTML của trang web. Trong trình duyệt của bạn, chúng ta hãy truy cập http://books.toscrape.com/catalogue/page-1.html. Sau đó, nhấp chuột phải vào các thành phần của trang web sẽ được cạo và nhấp vào nút Kiểm tra để hiểu hệ thống phân cấp của các thẻ như được hiển thị bên dưới.inspect button to understand the hierarchy of the tags as shown below.

Điều này sẽ cho bạn thấy HTML cơ bản cho những gì bạn đang kiểm tra. Hình ảnh sau đây minh họa các bước sau:

Từ việc kiểm tra HTML, chúng tôi tìm hiểu cách truy cập URL của cuốn sách, hình ảnh bìa, tiêu đề, xếp hạng, giá cả và nhiều trường hơn từ HTML. Hãy viết một chức năng loại bỏ một mục sách và trích xuất dữ liệu của nó:

 Traceback (most recent call last):
   File "C:\Python27\Testing.py", line 8, in <module>
     page = urllib2.urlopen(url)
   File "C:\Python27\lib\urllib2.py", line 127, in urlopen
     return _opener.open(url, data, timeout)
   File "C:\Python27\lib\urllib2.py", line 404, in open
     response = self._open(req, data)
   File "C:\Python27\lib\urllib2.py", line 427, in _open
     'unknown_open', req)
   File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
     result = func(*args)
   File "C:\Python27\lib\urllib2.py", line 1247, in unknown_open
     raise URLError('unknown url type: %s' % type)
 URLError: <urlopen error unknown url type: c>
7

Dòng cuối cùng của đoạn trích trên chỉ vào một hàm để viết danh sách các chuỗi được quét vào tệp CSV. Hãy thêm chức năng đó ngay bây giờ:

 Traceback (most recent call last):
   File "C:\Python27\Testing.py", line 8, in <module>
     page = urllib2.urlopen(url)
   File "C:\Python27\lib\urllib2.py", line 127, in urlopen
     return _opener.open(url, data, timeout)
   File "C:\Python27\lib\urllib2.py", line 404, in open
     response = self._open(req, data)
   File "C:\Python27\lib\urllib2.py", line 427, in _open
     'unknown_open', req)
   File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
     result = func(*args)
   File "C:\Python27\lib\urllib2.py", line 1247, in unknown_open
     raise URLError('unknown url type: %s' % type)
 URLError: <urlopen error unknown url type: c>
8

Vì chúng tôi có một chức năng có thể cạo một trang và xuất sang CSV, chúng tôi muốn một chức năng khác thu thập thông qua trang web được phân trang, thu thập dữ liệu sách trên mỗi trang.

Để làm điều này, chúng ta hãy nhìn vào URL mà chúng ta đang viết cái cào này cho:

 Traceback (most recent call last):
   File "C:\Python27\Testing.py", line 8, in <module>
     page = urllib2.urlopen(url)
   File "C:\Python27\lib\urllib2.py", line 127, in urlopen
     return _opener.open(url, data, timeout)
   File "C:\Python27\lib\urllib2.py", line 404, in open
     response = self._open(req, data)
   File "C:\Python27\lib\urllib2.py", line 427, in _open
     'unknown_open', req)
   File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
     result = func(*args)
   File "C:\Python27\lib\urllib2.py", line 1247, in unknown_open
     raise URLError('unknown url type: %s' % type)
 URLError: <urlopen error unknown url type: c>
9

Phần tử khác nhau duy nhất trong URL là số trang. Chúng ta có thể định dạng URL động để nó trở thành URL hạt giống:


from bs4 import BeautifulSoup


 with open('files/file1.html') as f:
    #read File
    content = f.read()
    #parse HTML
    soup = BeautifulSoup(content, 'html.parser')
    #print Title tag
    print(soup.title)      

0

Chuỗi này được định dạng URL với số trang có thể được tìm nạp bằng phương thức

       
import glob

files = glob.glob('files/*.html')

for fi in files:
    with open(fi) as f:
        content = f.read()
        soup = BeautifulSoup(content, 'html.parser')
        print(soup.title)
        

5. Sau đó chúng ta có thể tạo một đối tượng
<title>pytutorial | The Simplest Python and Django Tutorials</title>
0 mới. Mỗi lần chúng tôi nhận được đối tượng súp, sự hiện diện của nút "tiếp theo" được kiểm tra để chúng tôi có thể dừng ở trang cuối. Chúng tôi theo dõi một bộ đếm cho số trang được tăng thêm 1 sau khi cạo thành công một trang.


from bs4 import BeautifulSoup


 with open('files/file1.html') as f:
    #read File
    content = f.read()
    #parse HTML
    soup = BeautifulSoup(content, 'html.parser')
    #print Title tag
    print(soup.title)      

1

Hàm ở trên,

       
import glob

files = glob.glob('files/*.html')

for fi in files:
    with open(fi) as f:
        content = f.read()
        soup = BeautifulSoup(content, 'html.parser')
        print(soup.title)
        

7, được gọi đệ quy cho đến khi hàm
       
import glob

files = glob.glob('files/*.html')

for fi in files:
    with open(fi) as f:
        content = f.read()
        soup = BeautifulSoup(content, 'html.parser')
        print(soup.title)
        

8 trả về
       
import glob

files = glob.glob('files/*.html')

for fi in files:
    with open(fi) as f:
        content = f.read()
        soup = BeautifulSoup(content, 'html.parser')
        print(soup.title)
        

9. Tại thời điểm này, mã sẽ xóa phần còn lại của trang web và lối ra.

Đối với phần cuối cùng của câu đố, chúng tôi bắt đầu dòng chảy. Chúng tôi xác định

   
<title>Google</title>
<title>Flavio Copes</title>
<title>pytutorial | The Simplest Python and Django Tutorials</title> 

0 và gọi
       
import glob

files = glob.glob('files/*.html')

for fi in files:
    with open(fi) as f:
        content = f.read()
        soup = BeautifulSoup(content, 'html.parser')
        print(soup.title)
        

7 để lấy dữ liệu. Điều này được thực hiện trong khối
   
<title>Google</title>
<title>Flavio Copes</title>
<title>pytutorial | The Simplest Python and Django Tutorials</title> 

2:


from bs4 import BeautifulSoup


 with open('files/file1.html') as f:
    #read File
    content = f.read()
    #parse HTML
    soup = BeautifulSoup(content, 'html.parser')
    #print Title tag
    print(soup.title)      

2

Nếu bạn muốn tìm hiểu thêm về khối

   
<title>Google</title>
<title>Flavio Copes</title>
<title>pytutorial | The Simplest Python and Django Tutorials</title> 

2, hãy xem hướng dẫn của chúng tôi về cách thức hoạt động.

Bạn có thể thực thi tập lệnh như được hiển thị bên dưới trong thiết bị đầu cuối của mình và nhận đầu ra là:


from bs4 import BeautifulSoup


 with open('files/file1.html') as f:
    #read File
    content = f.read()
    #parse HTML
    soup = BeautifulSoup(content, 'html.parser')
    #print Title tag
    print(soup.title)      

3

from bs4 import BeautifulSoup


 with open('files/file1.html') as f:
    #read File
    content = f.read()
    #parse HTML
    soup = BeautifulSoup(content, 'html.parser')
    #print Title tag
    print(soup.title)      

4

Dữ liệu đã được tìm thấy trong thư mục làm việc hiện tại theo tên tệp

   
<title>Google</title>
<title>Flavio Copes</title>
<title>pytutorial | The Simplest Python and Django Tutorials</title> 

4. Đây là mẫu nội dung của tệp:


from bs4 import BeautifulSoup


 with open('files/file1.html') as f:
    #read File
    content = f.read()
    #parse HTML
    soup = BeautifulSoup(content, 'html.parser')
    #print Title tag
    print(soup.title)      

5

Làm tốt lắm! Nếu bạn muốn có một cái nhìn toàn bộ mã Scraper, bạn có thể tìm thấy nó trên GitHub.

Sự kết luận

Trong hướng dẫn này, chúng tôi đã học được đạo đức của việc viết những người phế liệu web tốt. Sau đó, chúng tôi đã sử dụng súp đẹp để trích xuất dữ liệu từ tệp HTML bằng các thuộc tính đối tượng của súp đẹp và đó là các phương pháp khác nhau như


f = open('file.html')
content = f.read()
#parse HTML
soup = BeautifulSoup(content, 'html.parser')
#print Title tag
print(soup.title)
5,
<title>pytutorial | The Simplest Python and Django Tutorials</title>
5 và
<title>pytutorial | The Simplest Python and Django Tutorials</title>
3. Sau đó, chúng tôi đã xây dựng một cạp hơn là lấy một danh sách sách trực tuyến và xuất sang CSV.

Quét web là một kỹ năng hữu ích giúp các hoạt động khác nhau như trích xuất dữ liệu như API, thực hiện QA trên trang web, kiểm tra các URL bị hỏng trên trang web và hơn thế nữa. Cẩu tiếp theo bạn sẽ xây dựng là gì?

Làm cách nào để đọc HTML với BeautifulSoup?

Approach:..
Nhập mô -đun ..
Tạo tài liệu HTML và chỉ định thẻ '' vào mã ..
Chuyển tài liệu HTML vào hàm đẹp () ..
Sử dụng thẻ 'P' để trích xuất các đoạn văn từ đối tượng đẹp ..
Nhận văn bản từ tài liệu HTML bằng get_text () ..

Làm cách nào để mở một tệp HTML trong Python?

Approach..
Tạo một tệp HTML mà bạn muốn mở ..
Trong Python, mô -đun nhập ..
Gọi tệp HTML bằng Open_New_Tab ().

Làm thế nào để bạn phân tích một cơ thể HTML trong Python?

Example..
từ HTML.Nhập phân tích cú pháp Htmlparser ..
Trình phân tích cú pháp lớp (HTMLPARSER):.
# Phương thức để nối thẻ bắt đầu vào danh sách start_tags ..
DEF Tay cầm_starttag (self, Tag, attrs):.
Global start_tags ..
start_tags.Phụ lục (thẻ).
# Phương thức nối thẻ kết thúc vào danh sách end_tags ..
DEF Tay cầm_endtag (self, tag):.

Làm thế nào đọc và viết tệp HTML trong Python?

Làm thế nào để ghi vào một tệp HTML trong Python?.
Tạo và xem các tệp HTML với Python ..
Python |Khởi chạy trình duyệt web bằng mô -đun Webbrowser ..
Thực hiện tìm kiếm Google bằng mã Python ..
Số lượng thử nghiệm dự kiến cho đến khi thành công ..
Tuyến tính của kỳ vọng ..
Kỳ vọng hoặc giá trị dự kiến của một mảng ..