Mã python để trích xuất dữ liệu từ url

Một tùy chọn có thể là kiểm tra trang web này và nhập thủ công từng thông tin được yêu cầu. Hoặc tốt hơn nữa, bạn có thể để Python thực hiện mọi công việc nặng nhọc cho bạn

Sử dụng một trong những thư viện hữu ích nhất của Python, BeautifulSoup, chúng tôi có thể thu thập hầu hết dữ liệu được hiển thị trên bất kỳ trang web nào bằng cách viết một số mã tương đối đơn giản. Hành động này được gọi là Web Scraping. Trong vài phần tiếp theo, chúng ta sẽ tìm hiểu và giải thích những kiến ​​thức cơ bản về BeautifulSoup và cách sử dụng nó để thu thập dữ liệu từ hầu hết mọi trang web

Đăng ký Tư cách thành viên trung bình tại đây để có quyền truy cập không giới hạn và nội dung hỗ trợ như của tôi. Với sự hỗ trợ của bạn, tôi kiếm được một phần nhỏ phí thành viên. Thanks

Các thách thức

Để học cách sử dụng BeautifulSoup, trước tiên chúng ta phải có lý do để sử dụng nó. Giả sử rằng, bạn có một khách hàng đang tìm kiếm trích dẫn từ những người nổi tiếng. Họ muốn có báo giá mới mỗi tuần cho năm tới. Họ đã giao cho chúng tôi công việc trình bày cho họ ít nhất năm mươi hai câu trích dẫn và tác giả tương ứng của chúng.

Trang web để cạo

Chúng tôi có thể chỉ cần truy cập bất kỳ trang web nào để tìm những câu trích dẫn này nhưng chúng tôi sẽ sử dụng trang web này cho danh sách các câu trích dẫn. Bây giờ, khách hàng của chúng tôi muốn các báo giá này được định dạng thành một bảng tính đơn giản. Vì vậy, bây giờ chúng tôi có lựa chọn nhập năm mươi hai trích dẫn và tác giả tương ứng của chúng trong một bảng tính hoặc chúng tôi có thể sử dụng Python và BeautifulSoup để làm tất cả những điều đó cho chúng tôi. Vì vậy, để tiết kiệm thời gian và đơn giản, chúng tôi muốn sử dụng Python và BeautifulSoup

Bắt đầu BeautifulSoup

Hãy bắt đầu với việc mở bất kỳ IDE nào bạn thích nhưng chúng tôi sẽ sử dụng Jupyter Notebook. (Mã Github cho tất cả điều này sẽ có ở cuối bài viết)

Nhập thư viện Python

Chúng tôi sẽ bắt đầu bằng cách nhập các thư viện cần thiết cho BeautifulSoup

from bs4 import BeautifulSoup as bs
import pandas as pd
pd.set_option('display.max_colwidth', 500)
import time
import requests
import random

Truy cập trang web

Tiếp theo, chúng ta sẽ phải thực sự truy cập trang web để BeautifulSoup phân tích cú pháp bằng cách chạy đoạn mã sau

page = requests.get("http://quotes.toscrape.com/")page# <Response [200]>

Điều này trả về mã trạng thái phản hồi cho chúng tôi biết nếu yêu cầu đã được hoàn thành thành công. Ở đây chúng tôi đang tìm kiếm Phản hồi [200] có nghĩa là chúng tôi đã truy cập trang web thành công

Phân tích trang web

Ở đây chúng tôi sẽ phân tích cú pháp trang web bằng BeautifulSoup

soup = bs(page.content)soup

Chạy mã này sẽ trả về một tài liệu văn bản được in bằng mã HTML giống như thế này

Chúng tôi có thể điều hướng qua tài liệu được phân tích cú pháp ở trên bằng BeautifulSoup

Điều hướng món súp

Bây giờ chúng tôi sẽ cần tìm chính xác thứ mà chúng tôi đang tìm kiếm trong tài liệu HTML được phân tích cú pháp. Hãy bắt đầu bằng cách tìm các trích dẫn

Một cách dễ dàng để tìm thấy những gì chúng tôi đang tìm kiếm là bằng cách

  • Truy cập trang web và tìm phần thông tin mong muốn (trong trường hợp của chúng tôi là phần trích dẫn)
  • Đánh dấu phần thông tin đó (câu trích dẫn)
  • Nhấp chuột phải vào nó và chọn Kiểm tra

Thao tác này sẽ mở ra một cửa sổ mới trông như thế này

Phần được đánh dấu là nơi chúng tôi sẽ tìm thấy trích dẫn mà chúng tôi đang tìm kiếm. Chỉ cần nhấp vào mũi tên ở bên trái của phần được đánh dấu để xem trích dẫn trong mã

Thông tin HTML cho Điều hướng

Dựa trên mã HTML mà chúng tôi thấy được đánh dấu, chúng tôi có thể sử dụng thông tin đó để điều hướng món súp. Chúng tôi sẽ sử dụng thuộc tính

page = requests.get("http://quotes.toscrape.com/")page# <Response [200]>
0 trong mã của riêng mình để có khả năng tìm thấy các trích dẫn mà chúng tôi đang tìm kiếm. Thuộc tính này sẽ có thể trả về cho chúng ta dòng (hoặc nhiều dòng) mã mong muốn dựa trên bất kỳ đối số nào chúng ta cung cấp cho nó. Vì chúng tôi có thể thấy rằng mã HTML cho trích dẫn có chứa
page = requests.get("http://quotes.toscrape.com/")page# <Response [200]>
1, nên chúng tôi có thể sử dụng mã đó trong mã BeautifulSoup của mình

soup.find_all(class_='text')

Chạy mã này sẽ trả về kết quả sau

Từ đó, chúng ta có thể thấy rằng chúng ta có thể định vị và truy xuất thành công mã và văn bản có chứa các trích dẫn cần thiết

Để chỉ truy xuất văn bản và loại trừ mã không cần thiết, chúng tôi sẽ phải sử dụng thuộc tính

page = requests.get("http://quotes.toscrape.com/")page# <Response [200]>
2 trong mỗi kết quả. Để làm như vậy, chúng ta sẽ lặp qua danh sách bằng cách sử dụng vòng lặp “for”

quotes = [i.text for i in soup.find_all(class_='text')]quotes

Điều này sẽ cung cấp cho chúng tôi danh sách các trích dẫn không có mã HTML tương ứng

Bây giờ chúng tôi biết làm thế nào chúng tôi có thể truy cập các trích dẫn trong trang web và lấy chúng cho mục đích của chúng tôi. Lặp lại các bước đã đề cập trước đó để truy xuất tên tác giả cho từng trích dẫn

________số 8

Truy cập nhiều trang

Bây giờ chúng ta đã biết cách truy xuất dữ liệu từ một trang web cụ thể, chúng ta có thể chuyển sang dữ liệu từ nhóm trang tiếp theo. Như chúng ta có thể thấy từ trang web, tất cả các trích dẫn không được lưu trữ trên một trang. Chúng tôi phải có khả năng điều hướng đến các trang khác nhau trong trang web để nhận thêm báo giá

Lưu ý rằng url cho mỗi trang mới chứa một giá trị thay đổi

  • http. //dấu ngoặc kép. để cạo. com/trang/2/
  • http. //dấu ngoặc kép. để cạo. com/trang/3/
  • vân vân

Biết được điều này, chúng ta có thể tạo một danh sách URL đơn giản để lặp lại nhằm truy cập các trang khác nhau trong trang web

urls=[f"http://quotes.toscrape.com/page/{i}/" for i in range(1,11)]urls

Điều này trả về một danh sách các trang web chúng tôi có thể sử dụng

Từ danh sách này, chúng ta có thể tạo một vòng lặp “for” khác để thu thập số lượng trích dẫn cần thiết và tác giả tương ứng của chúng

Tránh phát hiện quét web

Một điều quan trọng cần lưu ý. một số trang web không chấp thuận việc quét web. Các trang web này sẽ triển khai các cách để phát hiện xem bạn có đang sử dụng công cụ quét web chẳng hạn như Beautiful Soup hay không. Ví dụ: một trang web có thể phát hiện xem một số lượng lớn yêu cầu có được thực hiện trong một khoảng thời gian ngắn hay không, đó là những gì chúng tôi đang làm ở đây. Để có khả năng tránh bị phát hiện, chúng tôi có thể ngẫu nhiên hóa tỷ lệ yêu cầu của mình để mô phỏng chặt chẽ tương tác của con người. Đây là cách chúng tôi làm điều đó

Tạo danh sách các giá trị

page = requests.get("http://quotes.toscrape.com/")page# <Response [200]>
0

Sau đó, ở cuối mỗi vòng lặp, hãy nhập đoạn mã sau

page = requests.get("http://quotes.toscrape.com/")page# <Response [200]>
1

Ở đây, chúng tôi đang chọn ngẫu nhiên một giá trị từ danh sách mà chúng tôi đã tạo và đợi khoảng thời gian đã chọn đó trước khi vòng lặp bắt đầu lại. Điều này sẽ làm chậm mã của chúng tôi nhưng sẽ giúp chúng tôi tránh bị phát hiện

Mang tất cả lại với nhau

Bây giờ chúng ta đã có tất cả các phần, chúng ta có thể xây dựng vòng lặp “for” cuối cùng sẽ thu thập ít nhất 52 trích dẫn và tác giả tương ứng của chúng

Toàn bộ mã để truy xuất ít nhất 52 trích dẫn và tác giả của chúng

Khi chúng tôi chạy mã ở trên, chúng tôi sẽ kết thúc với một danh sách các trích dẫn và một danh sách các tác giả. Tuy nhiên, khách hàng của chúng tôi muốn báo giá trong một bảng tính. Để đáp ứng yêu cầu đó, chúng ta sẽ phải sử dụng thư viện Python. gấu trúc

Nhập danh sách vào Pandas DataFrame rất đơn giản

page = requests.get("http://quotes.toscrape.com/")page# <Response [200]>
2

Vì các trích dẫn và các tác giả đã được loại bỏ theo thứ tự, chúng sẽ dễ dàng nhập vào DataFrame

Khi chúng tôi đã hoàn thành và chạy mã ở trên, DF cuối cùng sẽ giống như vậy

Xuất sắc. DF trông tuyệt vời và ở định dạng chính xác mà khách hàng yêu cầu. Sau đó, chúng tôi có thể lưu DF dưới dạng tệp bảng tính excel mà sau đó chúng tôi có thể gửi cho khách hàng của mình

Đóng cửa

Chúng tôi hy vọng bạn đã học được một chút về cách quét web từ hướng dẫn từng bước này. Mặc dù ví dụ chúng tôi sử dụng có thể khá đơn giản, nhưng các kỹ thuật được sử dụng sẽ vẫn được áp dụng cho nhiều trang web khác nhau trên internet. Các trang web có giao diện phức tạp hơn yêu cầu sự tương tác rộng rãi của người dùng sẽ yêu cầu một thư viện Python khác có tên là Selenium. Tuy nhiên, hầu hết các trang web sẽ chỉ cần BeautifulSoup để cạo dữ liệu. Hướng dẫn chúng tôi đã thực hiện ở đây là đủ để giúp bạn bắt đầu. hạnh phúc cạo

Làm cách nào để lấy dữ liệu từ một URL trong Python?

Cách lấy URL biểu mẫu tệp HTML bằng Python .
Gọi hàm đọc trên biến webURL
Biến đọc cho phép đọc nội dung của tệp dữ liệu
Đọc toàn bộ nội dung của URL vào một biến gọi là dữ liệu
Chạy mã- Nó sẽ in dữ liệu sang định dạng HTML

Làm cách nào để trích xuất các bài báo dữ liệu văn bản từ URL đã cho trong Python?

Cách tiếp cận. .
Tạo một tệp văn bản
Bây giờ cho chương trình, nhập mô-đun cần thiết và chuyển URL và **. .
Tạo ví dụ yêu cầu và chuyển vào URL
Mở tệp ở chế độ đọc và chuyển (các) tham số cần thiết
Chuyển các yêu cầu vào hàm Beautifulsoup()
Tạo một tệp khác (hoặc bạn cũng có thể viết/nối thêm vào tệp hiện có)