Hướng dẫn how do you scrape a table data from a website in python? - làm thế nào để bạn lấy dữ liệu bảng từ một trang web trong python?

... This is the row information. Each row has a corresponding or cell data information.

Nhập thư viện

Chúng tôi sẽ cần các yêu cầu để có được nội dung HTML của trang web và lxml.html để phân tích các trường liên quan. Cuối cùng, chúng tôi sẽ lưu trữ dữ liệu trên một khung dữ liệu gấu trúc.requests for getting the HTML contents of the website and lxml.html for parsing the relevant fields. Finally, we will store the data on a Pandas Dataframe.

import requests
import lxml.html as lh
import pandas as pd

Tế bào bảng cạo

Mã dưới đây cho phép chúng tôi lấy dữ liệu Pokemon StatS của bảng HTML.

url='http://pokemondb.net/pokedex/all'#Create a handle, page, to handle the contents of the website
page = requests.get(url)
#Store the contents of the website under doc
doc = lh.fromstring(page.content)
#Parse data that are stored between
.. of HTML
tr_elements = doc.xpath('//tr')

Để kiểm tra tỉnh táo, đảm bảo rằng tất cả các hàng có cùng chiều rộng. Nếu không, có lẽ chúng ta có một cái gì đó không chỉ là bảng.

#Check the length of the first 12 rows
[len(T) for T in tr_elements[:12]]

Đầu ra: [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10] [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]

Có vẻ như tất cả các hàng của chúng tôi có chính xác 10 cột. Điều này có nghĩa là tất cả các dữ liệu được thu thập trên tr_elements là từ bảng.

Tiêu đề bảng phân tích cú pháp

Tiếp theo, hãy để phân tích cú pháp hàng đầu tiên là tiêu đề của chúng tôi.

tr_elements = doc.xpath('//tr')#Create empty list
col=[]
i=0
#For each row, store each first element (header) and an empty list
for t in tr_elements[0]:
i+=1
name=t.text_content()
print '%d:"%s"'%(i,name)
col.append((name,[]))

Đầu ra: 1: Tiết##2 ATK 9 9: SP sp. Def ”10: tốc độ”
1:”#”
2:”Name”
3:”Type”
4:”Total”
5:”HP”
6:”Attack”
7:”Defense”
8:”Sp. Atk”
9:”Sp. Def”
10:”Speed”

Tạo gấu trúc DataFrame

Mỗi tiêu đề được gắn vào một tuple cùng với một danh sách trống.

#Since out first row is the header, data is stored on the second row onwards
for j in range(1,len(tr_elements)):
#T is our j'th row
T=tr_elements[j]

#If row is not of size 10, the //tr data is not from our table
if len(T)!=10:
break

#i is the index of our column
i=0

#Iterate through each element of the row
for t in T.iterchildren():
data=t.text_content()
#Check if row is empty
if i>0:
#Convert any numerical value to integers
try:
data=int(data)
except:
pass
#Append the data to the empty list of the i'th column
col[i][1].append(data)
#Increment i for the next column
i+=1

Chỉ cần chắc chắn, hãy để kiểm tra độ dài của mỗi cột. Lý tưởng nhất, tất cả họ nên giống nhau.

[len(C) for (title,C) in col]

Đầu ra: [800, 800, 800, 800, 800, 800, 800, 800, 800, 800] [800, 800, 800, 800, 800, 800, 800, 800, 800, 800]

Hoàn hảo! Điều này cho thấy mỗi 10 cột của chúng tôi có chính xác 800 giá trị.

Bây giờ chúng tôi đã sẵn sàng để tạo DataFrame:

Dict={title:column for (title,column) in col}
df=pd.DataFrame(Dict)

Nhìn vào 5 ô hàng đầu trên DataFrame:

df.head()

Ở đó bạn có nó! Bây giờ bạn có một khung dữ liệu gấu trúc với tất cả các thông tin cần thiết!

thông tin thêm

Hướng dẫn này là một tập hợp con của chuỗi 3 phần:

Các loạt phim:

  • Cạo một trang web Pokemon
  • Phân tích dữ liệu
  • Xây dựng Gui Pokedex

Là một nhà khoa học dữ liệu, dữ liệu là thực phẩm của chúng tôi và vì vậy chúng tôi cần tìm dữ liệu đó bất cứ nơi nào có thể. Hầu hết các lần, chúng tôi sẽ thấy một cái gì đó thú vị trên một trang web và muốn làm việc với nó, nếu bạn đã từng có cảm giác đó, thì đây là dành cho bạn. Hôm nay, chúng tôi sẽ loại bỏ trang web của NCDC, (Trung tâm kiểm soát dịch bệnh) trên Covid-19. Nhấn vào đây để truy cập trang web.

Bước 1: Tải xuống Python hoặc Anaconda

Nếu bạn ở đây, thì tôi sẽ cho rằng bạn đã cài đặt Python, nếu không, hãy kiểm tra ở đây. Nếu bạn không chắc chắn, thì bạn nên đơn giản mở dấu nhắc lệnh của mình, điều mà bạn có thể dễ dàng thực hiện bằng cách gõ 'CMD' vào khu vực tìm kiếm và bùng nổ, nó sẽ đưa ra một bật ra, sau đó bạn gõ 'python', nếu bạn Đã cài đặt Python, nó sẽ hiển thị một cái gì đó như thế này;

Bước 2: Cài đặt các thư viện cần thiết

Để thực hiện quét web, một số thư viện nhất định cần được cài đặt và công việc của bạn càng phức tạp, bạn càng có nhiều khả năng các thư viện khác, tuy nhiên, về cơ bản, bạn cần súp đẹp, yêu cầu và có thể bất kỳ trình phân tích cú pháp nào bạn chọn. Bạn có thể dễ dàng sử dụng Cài đặt PIP cho nó. Nó cho thấy một cái gì đó như thế này;

Bước 3: Mở sổ ghi chép Jupyter và bắt đầu bằng cách nhập tất cả các thư viện cần thiết ngay bây giờ

Bước 4: Tải lên URL của trang web

Bước 5: Nhận nội dung được tải lên. Ở đây, những gì bạn đang cố gắng làm là làm cho Jupyter Notebook có thể đọc qua trang URL mà bạn đã tải xuống. Đây là nơi thư viện xinh đẹp của bạn đến chơi. Những gì súp đẹp làm là có được nội dung của trang đó và phân tích thông qua nó; Vâng, và nhiều hơn nữa !!

Bước 6: Kiểm tra URL để chắc chắn về những gì bạn cần cạo và cách nó được mã hóa trong HTML. Đối với trang web covid này, chúng tôi dự định sẽ cạo bảng, do đó, tôi thú vị hơn trong việc mã hóa cho bảng. Để làm điều này, bạn đã nhấp chuột phải vào bất kỳ phần nào của trang web và nhấp vào kiểm tra, sau đó bạn sẽ quét qua để biết mã nào cho phần quan trọng bạn cần. Đối với bảng của chúng tôi, nó được coi là bảng. Nếu bạn không quen thuộc với bảng HTML, hãy đọc ví dụ này.

Phần được tô sáng ở bên phải cho thấy từ khóa là bảng

Bây giờ chúng tôi đã nhận ra rằng từ khóa là ‘bảng, chúng tôi sử dụng máy tính xách tay Jupyter để tìm từ khóa đó.

Điều này cho thấy tất cả các nội dung của bảng cũng như những gì chúng được mã hóa với

Bước 7: Trong mã nguồn HTML, mỗi hàng được mã hóa bằng 'tr', mỗi tiêu đề với 'thứ' và mỗi điểm dữ liệu với 'TD', thật thú vị khi lưu ý rằng cả th và TD thường có thể được tìm thấy trong một hàng, do đó, điều tiếp theo sẽ là để có được điều đó;

Bước 8: Bây giờ chúng tôi đã nhận được tất cả các nội dung từ trang web trên sổ ghi chép Jupyter của chúng tôi, sau đó chúng tôi có thể quyết định chuyển đổi nó thành CSV hoặc bất kỳ định dạng tệp nào khác mà chúng tôi chọn.

Và Voila! Bạn có một tệp CSV với bảng mà bạn vừa cạo. Chà, cũng hạnh phúc cào.

Làm thế nào trích xuất dữ liệu bảng HTML từ Python?

Để trích xuất một bảng từ HTML, trước tiên bạn cần mở các công cụ nhà phát triển của mình để xem HTML trông như thế nào và xác minh xem nó có thực sự là một bảng chứ không phải một số yếu tố khác. Bạn mở các công cụ của nhà phát triển bằng khóa F12, xem tab Phần tử trực tuyến và làm nổi bật phần tử mà bạn quan tâm.open developer tools with the F12 key, see the “Elements” tab, and highlight the element you're interested in.

Python có thể lấy dữ liệu từ một trang web không?

Khi lấy dữ liệu từ các trang web có Python, bạn thường quan tâm đến các phần cụ thể của trang. Bằng cách dành một chút thời gian để xem qua tài liệu HTML, bạn có thể xác định các thẻ với các thuộc tính duy nhất mà bạn có thể sử dụng để trích xuất dữ liệu bạn cần., you're often interested in particular parts of the page. By spending some time looking through the HTML document, you can identify tags with unique attributes that you can use to extract the data you need.

Đó là lựa chọn tốt nhất để cạo các bảng từ một trang web?

Apify.Apify là nền tảng tự động hóa và tự động hóa web mạnh nhất.. Apify is the no-code most powerful web scraping and automation platform.

Web có được cào với Python hợp pháp không?

Từ tất cả các cuộc thảo luận trên, có thể kết luận rằng việc cạo web thực sự không phải là bất hợp pháp nhưng một người nên có đạo đức trong khi làm điều đó.Nếu được thực hiện theo một cách tốt, việc cạo web có thể giúp chúng tôi sử dụng tốt nhất web, ví dụ lớn nhất là công cụ tìm kiếm của Google.Web Scraping is actually not illegal on its own but one should be ethical while doing it. If done in a good way, Web Scraping can help us to make the best use of the web, the biggest example of which is Google Search Engine.

Trang web cơ sở dữ liệu Pokemon

Bắt đầu, chúng tôi sẽ thử lấy cơ sở dữ liệu Pokemon trực tuyến (http://pokemondb.net/pokedex/all).

Kiểm tra HTML

Trước khi tiến về phía trước, chúng ta cần hiểu cấu trúc của trang web mà chúng ta muốn cạo. Điều này có thể được thực hiện bằng cách nhấp vào nhấp chuột phải vào phần tử mà chúng tôi muốn cạo và sau đó nhấn vào kiểm tra. Với mục đích của chúng tôi, chúng tôi sẽ kiểm tra các yếu tố của bảng, như được minh họa dưới đây:right-clicking the element we wish to scrape and then hitting “Inspect”. For our purpose, we will inspect the elements of the table, as illustrated below:

Kiểm tra ô của bảng HTML

Dựa trên mã HTML, dữ liệu được lưu trữ sau ... đây là thông tin hàng. Mỗi hàng có một thông tin tương ứng .. hoặc dữ liệu di động.

..