Web scraping có thể được định nghĩa là phương pháp thu thập và tái cấu trúc dữ liệu từ các trang web. Nó cũng có thể được định nghĩa là phương pháp tiếp cận theo chương trình để lấy dữ liệu trang web theo cách tự động. Ví dụ, bạn muốn trích xuất ID email của tất cả những người đã bình luận trên một bài đăng trên Facebook. Bạn có thể thực hiện việc này bằng cách
Web scraping có thể được định nghĩa là phương pháp thu thập và tái cấu trúc dữ liệu từ các trang web. Nó cũng có thể được định nghĩa là phương pháp tiếp cận theo chương trình để lấy dữ liệu trang web theo cách tự động. Ví dụ, bạn muốn trích xuất ID email của tất cả những người đã bình luận trên một bài đăng trên Facebook. Bạn có thể thực hiện việc này theo hai phương pháp. Đầu tiên, bạn có thể trỏ con trỏ đến chuỗi địa chỉ email của bất kỳ người nào. Sau đó, bạn có thể sao chép và dán nó vào một tệp. Phương pháp này được gọi là scraping thủ công. Nhưng nếu bạn muốn thu thập 2000 ID email thì sao? Với sự trợ giúp của công cụ scraping web, bạn có thể trích xuất tất cả ID email trong 30 giây thay vì 3 giờ nếu bạn sử dụng scraping thủ công.
Bạn có thể sử dụng các công cụ trích xuất dữ liệu web để trích xuất thông tin từ các trang web. Bạn chỉ cần biết cách nhấp và không cần kiến thức lập trình. Các công cụ này tiết kiệm tài nguyên và tiết kiệm thời gian cũng như chi phí. Bạn có thể trích xuất hàng triệu trang dựa trên nhu cầu của mình mà không cần lo lắng về băng thông mạng. Một số trang web triển khai các chương trình chống bot ngăn chặn các chương trình trích xuất dữ liệu thu thập. Nhưng các công cụ trích xuất dữ liệu web tốt có các tính năng tích hợp để bỏ qua các công cụ này và mang lại trải nghiệm trích xuất dữ liệu liền mạch.
Python có các công cụ tuyệt vời để trích xuất dữ liệu từ web. Ví dụ, bạn có thể nhập thư viện yêu cầu để lấy nội dung từ trang web và bs4 ( BeautifulSoup ) để trích xuất thông tin có liên quan. Bạn có thể làm theo các bước dưới đây để trích xuất dữ liệu web trong Python. Chúng tôi sẽ trích xuất thông tin từ trang web này .
Bạn phải nhập thư viện yêu cầu để lấy mã HTML của trang web.
yêu cầu nhập khẩu
Bạn phải thực hiện yêu cầu GET đến trang web. Bạn có thể thực hiện bằng cách dán URL vào hàm requests.get().
r = requests.get( 'http://www.cleveland.com/metro/index.ssf/2017/12/case_western_reserve_university_president_barbara_snyders_base_salary_and_bonus_pay_tops_among_private_colleges_in_ohio.html' )
Trích xuất nội dung của trang web bằng r.content. Nó cung cấp nội dung của trang web theo byte.
c = r.nội dung
Bạn phải nhập thư viện BeautifulSoup vì nó giúp bạn dễ dàng thu thập thông tin từ các trang web.
từ bs4 nhập BeautifulSoup
Bạn phải tạo một đối tượng BeautifulSoup từ nội dung và phân tích cú pháp bằng nhiều phương pháp.
súp = BeautifulSoup ( c ) in ( soup.get_text ())
Bạn sẽ nhận được kết quả đầu ra (chỉ là một phần) trông giống như thế này.
Chúng ta phải tìm đúng bộ chọn CSS vì chúng ta cần trích xuất dữ liệu mong muốn. Chúng ta có thể tìm nội dung chính trên trang web bằng phương thức .find() của đối tượng soup.
main_content = soup.find('div', attrs = {'class': 'entry-content'})
Chúng ta có thể lấy thông tin dưới dạng văn bản từ bảng bằng cách sử dụng thuộc tính .text của soup.
nội dung = main_content. tìm ( 'ul' ). văn bản in (nội dung)
Chúng tôi đã lấy văn bản của bảng dưới dạng chuỗi. Nhưng thông tin sẽ rất hữu ích nếu chúng tôi trích xuất các phần cụ thể của chuỗi văn bản. Để thực hiện nhiệm vụ này, chúng tôi cần chuyển sang Biểu thức chính quy.
Biểu thức chính quy (RegEx) là một chuỗi các mẫu định nghĩa một mẫu tìm kiếm. Ý tưởng cơ bản là:
Giả sử chúng ta muốn trích xuất các thông tin sau từ bảng văn bản.
Bạn có thể trích xuất ba thông tin này bằng cách làm theo các bước dưới đây.
Nhập re và để trích xuất mức lương, bạn phải tạo một mẫu mức lương. Sử dụng phương thức re.compile() để biên dịch một mẫu biểu thức chính quy được cung cấp dưới dạng chuỗi thành một đối tượng mẫu RegEx. Ngoài ra, bạn có thể sử dụng pattern.findall() để tìm tất cả các kết quả khớp và trả về chúng dưới dạng danh sách các chuỗi. Mỗi chuỗi sẽ đại diện cho một kết quả khớp.
nhập re salary_pattern = re. biên dịch ( r'\$.+' ) salary = salary_pattern.findall(nội dung)
Lặp lại quy trình tương tự để trích xuất tên các trường cao đẳng. Tạo một mẫu và trích xuất tên.
school_pattern = re.compile(r'(?:,|,\s)([A-Z]{1}.*?)(?:\s\(|:|,)')
schools = school_pattern.findall(content)
print(schools)
print(salaries)
Lặp lại quy trình tương tự để trích xuất tên của các tổng thống. Tạo một mẫu và trích xuất tên cần thiết.
name_pattern = re.compile(r'^([A-Z]{1}.+?)(?:,)', flags = re.M)
names = name_pattern.findall(content)
print(names)
Mức lương trông lộn xộn và không dễ hiểu. Vì vậy, chúng tôi sử dụng Python list understanding để chuyển đổi mức lương chuỗi thành số. Chúng tôi sẽ sử dụng string slicing, split and join và list understanding để đạt được kết quả mong muốn.
lương = [ ' $876 , 001' , ' $543 , 903' , ' $2453 , 896' ] [ int ( '' .join(s[ 1 :].split( ',' ))) cho s trong lương]
Kết quả đầu ra như sau:
Trực quan hóa dữ liệu giúp bạn hiểu dữ liệu một cách trực quan để có thể thấy được xu hướng, mô hình và mối tương quan. Bạn có thể dịch một lượng lớn dữ liệu thành biểu đồ, đồ thị và các hình ảnh trực quan khác để xác định các giá trị ngoại lai và có được những hiểu biết có giá trị.
Chúng ta có thể sử dụng matplotlib để trực quan hóa dữ liệu như minh họa bên dưới.
Nhập các thư viện cần thiết như hiển thị bên dưới.
nhập pandas dưới dạng pd nhập matplotlib.pyplot dưới dạng plt
Tạo một khung dữ liệu pandas về trường học, tên và mức lương. Ví dụ, bạn có thể chuyển đổi các trường học thành một khung dữ liệu như sau:
df_school = pd .DataFrame (trường học) in (df_school)
Đầu ra là:
Tương tự như vậy, bạn có thể làm tương tự với mức lương và tên.
Để trực quan hóa dữ liệu, chúng ta có thể vẽ biểu đồ thanh như hình dưới đây.
df.plot( loại = 'barh' , x = 'Chủ tịch' , y = 'lương' )
Kết quả đầu ra như sau:
Web scraping giúp các doanh nghiệp trích xuất thông tin hữu ích về thông tin thị trường và ngành công nghiệp để cung cấp các dịch vụ dựa trên dữ liệu và đưa ra quyết định dựa trên dữ liệu. Proxy rất cần thiết để thu thập dữ liệu từ nhiều trang web khác nhau vì những lý do sau đây một cách hiệu quả.
Bạn có biết cần bao nhiêu proxy để có được những lợi ích trên không? Bạn có thể tính toán số lượng proxy cần thiết bằng cách sử dụng công thức này:
Số lượng proxy = Số lượng yêu cầu truy cập / Tốc độ thu thập dữ liệu
Số lượng yêu cầu truy cập phụ thuộc vào các thông số sau.
Mặt khác, tốc độ thu thập dữ liệu bị giới hạn bởi số lượng yêu cầu mà người dùng thực hiện trong một khoảng thời gian nhất định. Một số trang web cho phép một số lượng yêu cầu giới hạn cho mỗi người dùng để phân biệt yêu cầu tự động và yêu cầu của người dùng.
Bạn có thể sử dụng proxy trong Python bằng cách làm theo các bước dưới đây.
yêu cầu nhập khẩu
proxy = 'http://114.121.248.251:8080' url = 'https://ipecho.net/plain'
page = requests.get(url,
proxies={"http": proxy, "https": proxy})
in (trang.văn bản)
Kết quả đầu ra như sau:
Chúng tôi đã thảo luận rằng chúng ta có thể sử dụng web scraping để trích xuất dữ liệu từ các trang web thay vì sử dụng thủ công scraping. Web scraping là một quá trình tiết kiệm chi phí và thời gian. Các doanh nghiệp sử dụng nó để thu thập và tái cấu trúc thông tin web để đưa ra quyết định dựa trên dữ liệu và có được những hiểu biết có giá trị. Việc sử dụng proxy là điều cần thiết để web scraping an toàn vì nó ẩn địa chỉ IP gốc của người dùng khỏi trang web mục tiêu. Bạn có thể sử dụng trung tâm dữ liệu hoặc proxy dân dụng để web scraping. Nhưng tốt hơn là sử dụng proxy dân dụng vì chúng nhanh và không dễ bị phát hiện. Hơn nữa, chúng ta có thể sử dụng biểu thức chính quy trong Python để khớp hoặc tìm các tập hợp chuỗi. Điều đó có nghĩa là chúng ta có thể trích xuất bất kỳ mẫu chuỗi nào từ văn bản với sự trợ giúp của biểu thức chính quy. Chúng ta cũng thấy rằng hình ảnh hóa dữ liệu chuyển đổi lượng dữ liệu khổng lồ thành biểu đồ, đồ thị và các hình ảnh trực quan khác giúp chúng ta phát hiện ra các điểm bất thường và xác định các xu hướng hữu ích trong dữ liệu.