Hướng dẫn cạo web với Python: Mẹo và thủ thuật

trăn, cạo, Mar-06-20245 phút đọc

Bạn có thể tự động trích xuất một lượng lớn dữ liệu từ các trang web bằng cách sử dụng quét web và lưu nó trong cơ sở dữ liệu hoặc tệp. Dữ liệu được thu thập chủ yếu có thể được lưu trữ ở định dạng bảng tính hoặc bảng. Web scraping còn được gọi là trích xuất dữ liệu web, thu hoạch web. Nó là cần thiết bởi vì cạo thủ công là một công việc tẻ nhạt

Mục lục

Bạn có thể tự động trích xuất một lượng lớn dữ liệu từ các trang web bằng cách sử dụng quét web và lưu nó trong cơ sở dữ liệu hoặc tệp. Dữ liệu được thu thập chủ yếu có thể được lưu trữ ở định dạng bảng tính hoặc bảng. Web scraping còn được gọi là trích xuất dữ liệu web, thu hoạch web. Nó là cần thiết bởi vì cạo thủ công là một công việc tẻ nhạt có thể mất hàng giờ hoặc thậm chí vài ngày để hoàn thành. Vì vậy, bạn cần tự động hóa quy trình và trích xuất dữ liệu từ các trang web trong một phần nhỏ thời gian.

Bạn có thể sử dụng phần mềm quét web để tự động tải, thu thập dữ liệu và trích xuất dữ liệu từ nhiều trang của trang web dựa trên nhu cầu và yêu cầu của bạn. Nói tóm lại, bạn có thể lấy dữ liệu mong muốn của mình từ các trang web chỉ bằng một nút bấm. Trong thế giới hiện đại, các doanh nghiệp cần phân tích dữ liệu và thực hiện các hành động thông minh. Nhưng đôi khi, việc lấy dữ liệu từ các trang web rất khó khăn khi chủ sở hữu trang web sử dụng các kỹ thuật như cấm IP và CAPTCHA. Bạn có thể sử dụng máy chủ proxy hoặc VPN để khắc phục sự cố này vì chúng giúp bạn quét dữ liệu từ web ẩn danh. 

Tại sao cần phải quét web?

Các doanh nghiệp trên toàn thế giới thu thập dữ liệu từ web để có được thông tin chi tiết hữu ích bằng cách lưu trữ dữ liệu ở định dạng có thể sử dụng được. Một số ưu điểm của việc cạo web trong các ngành công nghiệp khác nhau được đưa ra dưới đây.

  • Web scraping thu thập các bộ dữ liệu đào tạo và thử nghiệm cho các dự án học máy.
  • Trong Thương mại điện tử, quét web được sử dụng để theo dõi giá của đối thủ cạnh tranh.
  • Web scraping được sử dụng trong Bất động sản để có được thông tin chi tiết về tài sản và chủ sở hữu / đại lý.
  • Trong Tiếp thị, quét web được sử dụng để xây dựng danh sách điện thoại và email để tiếp cận lạnh.

Dưới đây là những lý do chính để thu thập dữ liệu từ web.

Đạt được tự động hóa - Bạn có thể trích xuất dữ liệu từ các trang web bằng cách sử dụng các trình quét web mạnh mẽ. Bằng cách này, bạn có thể tiết kiệm thời gian từ các tác vụ thu thập dữ liệu thông thường. Bạn có thể thu thập dữ liệu với khối lượng lớn hơn một người có thể hy vọng đạt được với việc quét web. Hơn nữa, bạn cũng có thể tạo các bot web tinh vi để tự động hóa các hoạt động trực tuyến bằng cách sử dụng ngôn ngữ lập trình như Python, Javascript hoặc sử dụng công cụ quét web.

Bộ dữ liệu phong phú và độc đáo - Bạn có thể nhận được một lượng hình ảnh, video, văn bản và dữ liệu số phong phú từ Internet. Bạn cũng có thể tìm thấy các trang web có liên quan và tạo tập dữ liệu tùy chỉnh để phân tích, tùy thuộc vào mục tiêu của bạn. Ví dụ, bạn quan tâm đến việc hiểu sâu về thị trường thể thao Vương quốc Anh. Bạn có thể thiết lập web scrapers để thu thập nội dung video hoặc thông tin thống kê bóng đá cho bạn.

Quản lý dữ liệu hiệu quả - Bạn không cần phải sao chép và dán dữ liệu từ Internet vì bạn có thể thu thập chính xác dữ liệu từ các trang web khác nhau bằng cách quét web. Bằng cách này, công ty và nhân viên của bạn có thể dành nhiều thời gian hơn cho công việc sáng tạo bằng cách lưu trữ dữ liệu hiệu quả bằng phần mềm và chương trình tự động.

Business Intelligence and Insights – Web scraping from the Internet cho phép bạn làm như sau:

  • Giám sát hoạt động tiếp thị của đối thủ cạnh tranh
  • Tìm kiếm giá của đối thủ cạnh tranh
  • Xây dựng một bức tranh lớn hơn về thị trường của bạn

Hơn nữa, các doanh nghiệp có thể đạt được việc ra quyết định tốt hơn bằng cách tải xuống, làm sạch và phân tích dữ liệu với khối lượng đáng kể.

Tốc độ - Web scraping trích xuất dữ liệu từ các trang web với tốc độ tuyệt vời. Nó cho phép bạn cạo dữ liệu trong vài giờ thay vì vài ngày. Nhưng một số dự án có thể mất thời gian tùy thuộc vào độ phức tạp của chúng và các nguồn lực và công cụ mà chúng tôi sử dụng để hoàn thành chúng.

Độ chính xác của dữ liệu - Việc trích xuất dữ liệu thủ công từ các trang web liên quan đến lỗi của con người, dẫn đến các vấn đề nghiêm trọng. Do đó, việc trích xuất dữ liệu chính xác là rất quan trọng đối với bất kỳ thông tin nào, điều này có thể được thực hiện bằng cách quét web.

Web Scraping trong Python

Giả sử bạn phải trích xuất dữ liệu từ trang web này . Bạn sẽ phải cài đặt hai mô-đun Python là yêu cầu và BeautifulSoup. 

Nhập thư viện

Bạn có thể cài đặt các mô-đun này bằng cách sử dụng lệnh sau.

Yêu cầu cài đặt !pip
!pip cài đặt BeautifulSoup

Bạn có thể nhập các mô-đun này dưới dạng:

từ bs4 nhập khẩu BeautifulSoup
Yêu cầu nhập khẩu

Bạn có thể nhấp vào nút Kiểm tra ở góc trên cùng bên trái của trang web để làm nổi bật các yếu tố bạn muốn trích xuất. Trong trường hợp của chúng tôi, chúng tôi muốn trích xuất dữ liệu bảng của trang web này như hình dưới đây.

Thêm tiêu đề và URL

Bạn phải thêm tiêu đề và URL vào yêu cầu của mình. Tiêu đề có thể loại bỏ yêu cầu của bạn để có vẻ như nó đến từ một trình duyệt hợp pháp. 

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}

url = "https://en.wikipedia.org/wiki/List_of_national_capitals"

Bạn có thể sử dụng hàm requests.get() để gửi yêu cầu GET đến URL được chỉ định.

r = yêu cầu. get(URL, headers=headers)

Đối tượng BeautifulSoup

Bạn phải khởi tạo một đối tượng BeautifulSoup và đề cập đến các tham số của nó. Sau đó, bạn phải trích xuất tất cả các hàng của bảng. Bạn có thể lấy tất cả các phần tử bảng bằng cách sử dụng phương thức find_all() như thể hiện trong đoạn mã bên dưới.

súp = BeautifulSoup (r.content, "html.parser")
bảng = soup.find_all('bảng')[1]
hàng = table.find_all('tr')
row_list = danh sách()

Lặp qua các hàng

Bạn có thể sử dụng vòng lặp for để lặp qua tất cả các hàng trong bảng như được hiển thị trong mã bên dưới.

Đối với tr theo hàng:
    td = tr.find_all('td')
    row = [i.text cho i trong td]
    row_list.append(hàng)

Tạo Khung dữ liệu

Bạn có thể trực quan hóa dữ liệu được trích xuất rõ ràng nếu bạn tạo khung dữ liệu Pandas và xuất dữ liệu của mình thành tệp .csv. Để tạo khung dữ liệu, bạn phải nhập Pandas, như hình dưới đây.

Nhập khẩu gấu trúc dưới dạng PD

Bây giờ, bạn có thể chuyển đổi đối tượng súp của mình thành một khung dữ liệu sẽ chứa các hàng bảng sau.

  • Thành phố
  • Quốc gia
  • Ghi chú

Bạn có thể chuyển đổi khung dữ liệu của mình sang định dạng csv và in khung dữ liệu của mình như hình dưới đây.

df_bs = PD. DataFrame(row_list,columns=['Thành phố','Quốc gia','Ghi chú'])
df_bs.set_index('Quốc gia',inplace=True)
df_bs.to_csv('beautifulsoup.csv')
in(df_bs)

Bạn sẽ nhận được kết quả dưới đây.

Proxy để quét web bằng Python

Proxy hoạt động như một trung gian hoặc người trung gian giữa máy khách và máy chủ. Nó ẩn địa chỉ IP thực của bạn và vượt qua các bộ lọc và kiểm duyệt. Bạn có thể lấy một danh sách proxy miễn phí bằng cách chỉ sử dụng một hàm trong Python, như được hiển thị trong các bước dưới đây.

Nhập thư viện

Bạn phải nhập các mô-đun dưới đây bằng Python.

từ bs4 nhập khẩu BeautifulSoup
Yêu cầu nhập khẩu 
Nhập ngẫu nhiên

Xác định hàm

Bạn có thể định nghĩa hàm get_free_proxies() trong đó bạn phải đề cập đến URL của danh sách proxy miễn phí. Sau đó, bạn phải tạo một đối tượng BeautifulSoup và nhận phản hồi HTTP bằng cách sử dụng hàm requests.get(). 

def get_free_proxies():
    URL = "https://free-proxy-list.net/"
    Súp = BS(Yêu cầu.get(url).content, "html.parser")
    proxy = []

Sử dụng For Loop

Bạn có thể sử dụng phương thức find_all() trong vòng lặp for để lặp qua tất cả các hàng của bảng như hình dưới đây.

for row in soup.find("table", attrs={"id": "proxylisttable"}).find_all("tr")[1:]:
        tds = row.find_all("td")
        try:
            ip = tds[0].text.strip()
            port = tds[1].text.strip()
            host = f"{ip}:{port}"
            proxies.append(host)
        except IndexError:
            continue
    return proxies

Danh sách proxy hoạt động

Bạn có thể đề cập đến danh sách một số proxy hoạt động như proxy chúng tôi đã đề cập bên dưới.

proxy = [
    '167.172.248.53:3128',
    '194.226.34.132:5555',
    '203.202.245.62:80',
    '141.0.70.211:8080',
    '118.69.50.155:80',
    '201.55.164.177:3128',
    '51.15.166.107:3128',
    '91.205.218.64:80',
    '128.199.237.57:8080',
]

Yêu cầu phiên

Bạn phải tạo một hàm get_session() sẽ chấp nhận một danh sách các proxy. Nó cũng tạo ra một phiên yêu cầu chọn ngẫu nhiên bất kỳ proxy nào được truyền như được hiển thị trong mã bên dưới.

def get_session(proxies):
  session = requests.Session()
  proxy = random.choice(proxies)
  session.proxies = {"http": proxy, "https": proxy}
  return session

Đưa ra yêu cầu

Bạn có thể sử dụng vòng lặp for để thực hiện yêu cầu đến một trang web và nhận lại địa chỉ IP.

Đối với i trong phạm vi(5):
    s = get_session (proxy)
    cố gắng:
        print("Trang yêu cầu có IP:", s.get("http://icanhazip.com", timeout=1.5).text.strip())
    ngoại trừ Ngoại lệ là e:
        tiếp tục

Bạn có thể nhận được kết quả sau.

Tại sao proxy lại quan trọng đối với việc quét web?

Các doanh nghiệp có thể trích xuất dữ liệu có giá trị để đưa ra quyết định dựa trên dữ liệu và cung cấp các dịch vụ dựa trên dữ liệu với tính năng quét web. Proxy rất quan trọng đối với việc quét web vì những lý do sau.

  • Với proxy, bạn có thể thực hiện yêu cầu từ một khu vực địa lý cụ thể và xem nội dung cụ thể mà trang web hiển thị cho vị trí nhất định đó. Tính năng này của proxy có lợi khi bạn đang thu thập dữ liệu sản phẩm từ các nhà bán lẻ trực tuyến.
  • Proxy cho phép bạn thực hiện khối lượng yêu cầu cao hơn đến trang web mục tiêu mà không bị chặn hoặc cấm.
  • Proxy cho phép bạn thu thập dữ liệu từ các trang web một cách đáng tin cậy và hiệu quả hơn.
  • Với proxy, bạn có thể thực hiện các phiên đồng thời không giới hạn cho các trang web giống nhau hoặc khác nhau mà không sợ bị cấm.
  • Proxy ẩn địa chỉ IP của máy của bạn khỏi trang web mục tiêu, do đó cung cấp bảo mật bổ sung cho thiết bị của bạn.
  • Các doanh nghiệp sử dụng proxy để theo dõi giá cả và tính năng sản phẩm của đối thủ cạnh tranh để cải thiện dịch vụ và sản phẩm của họ.

Kết luận về hướng dẫn Python For Web Scraping này

Cho đến nay, chúng tôi đã thảo luận rằng quét web giúp chúng tôi trích xuất dữ liệu từ các trang web một cách tự động. Bạn có thể chuyển đổi dữ liệu thành định dạng có thể sử dụng như tệp .csv. Các doanh nghiệp sử dụng web scraping để kiểm tra giá cả và tính năng sản phẩm của đối thủ cạnh tranh. Quét web rất hữu ích nếu bạn sử dụng proxy vì chúng giữ danh tính của bạn ẩn danh bằng cách ẩn địa chỉ IP ban đầu của bạn khỏi trang web mục tiêu. Với proxy, bạn có thể gửi nhiều yêu cầu đến trang web mà không sợ bị chặn hoặc bị cấm.