Mạng xã hội cung cấp nguồn dữ liệu tuyệt vời để thu thập, cho dù là mục đích nghiên cứu hay thương mại. Và Instagram có lẽ là nền tảng sinh lợi nhất hiện nay. Tuy nhiên, nó cũng rất khó để thực hiện scraping, cả do những thách thức về kỹ thuật và pháp lý. Trong hướng dẫn này, chúng ta sẽ tìm hiểu những dữ liệu Instagram nào bạn có thể quét mà không gặp rắc rối và bạn nên chọn công cụ nào để tránh bị cấm địa chỉ IP. Ngoài ra, bạn sẽ được chia sẻ hướng dẫn từng bước để xây dựng công cụ Instagram Scraping cơ bản bằng Selenium. Hãy cùng theo dõi!
Instagram Scraping là quá trình tự động thu thập dữ liệu có sẵn công khai từ nền tảng truyền thông xã hội này. Tùy thuộc vào kiến thức lập trình của bạn, nó được thực hiện bằng cách sử dụng các công cụ quét được tạo sẵn hoặc các công cụ dọn dẹp web được tạo tùy chỉnh. Chỉ bằng cách thu thập thông tin từ các tag (#) hoặc bài đăng, bạn có thể thực hiện phân tích thị trường, theo dõi thương hiệu trực tuyến hoặc tìm những người có ảnh hưởng cho doanh nghiệp của mình.
Cách thực hiện Instagram Scraping một cách hợp pháp
Web Scraping vẫn là một lĩnh vực hợp pháp. Instagram Scraping cũng không ngoại lệ. Miễn là bạn thực hiện nó một cách cẩn thận có chọn lọc. Tuy nhiên, nếu có một điều bạn không nên làm, thì đó là thu thập dữ liệu sau khi đăng nhập. Cuối cùng, luật áp đặt các tiêu chuẩn khác nhau dựa trên trường hợp sử dụng. Ví dụ: bạn sẽ mất nhiều thời gian hơn nếu thu thập thông tin cho mục đích nghiên cứu hơn là cho mục đích thương mại. Bạn nên tìm hiểu thật kĩ về các quy định và điều khoản nếu bạn không chắc chắn về hoàn cảnh của mình.
Vì dữ liệu nào bạn có thể quét mà không cần đăng nhập? Có ba loại chính của dữ liệu có sẵn công khai:
Hashtag: URL bài đăng, URL phương tiện, ID, Tác giả bài đăng.
Hồ sơ: bài đăng mới nhất, URL bên ngoài, lượt thích, hình ảnh, nhận xét, số lượt thích trên mỗi bài đăng và người theo dõi.
Bài đăng: bài đăng mới nhất, ngày tháng, URL, nhận xét, lượt thích, ID tác giả.
Nhưng hãy nhớ rằng Instagram thường xuyên thay đổi các quy tắc, vì vậy bạn nên kiểm tra những gì bạn có thể thu thập trước khi thực sự làm như vậy.
Nhìn chung, có ba loại công cụ bạn có thể sử dụng để quét Instagram:
1) Công cụ quét web được tạo tùy chỉnh.
2) API tìm kiếm web.
3) Công cụ quét web tạo sẵn.
Nếu có kiến thức về lập trình, bạn có thể thử xây dựng trình quét web của riêng mình bằng cách sử dụng các khung quét web như Selenium hoặc Playwright. Nó có thể xử lý quá trình tự động hóa phức tạp và vì bạn là người chăm sóc bot scraping của mình nên bạn có thể điều chỉnh nó cho phù hợp với tất cả các thay đổi về cấu trúc mà Instagram thực hiện theo cách của bạn.
Instagram không còn có API chính thức của riêng mình nữa. Tuy nhiên, có rất nhiều nhà cung cấp đáng tin cậy cung cấp API thu thập dữ liệu trên web. Ví dụ: Apify cung cấp các API khác nhau để thu thập các điểm dữ liệu Instagram khác nhau, chẳng hạn như trình quét hồ sơ Instagram và trình quét bài đăng. Hoặc, bạn có thể sử dụng các trình quét web có mục đích chung dựa trên một nhóm proxy lớn như proxy của ZingProxy.
Python Selenium hiện là công cụ hàng đầu cho Instagram Scraping
Nếu không có bất kỳ kỹ năng lập trình nào, bạn có thể mua các công cụ sẵn như Parsehub, Octopude. Những công cụ này cho phép bạn trích xuất dữ liệu bằng cách nhấp trực tiếp vào dữ liệu hoặc sử dụng các mẫu.
Cách Scraping hồ sơ công khai trên Instagram bằng Selenium
Sử dụng Selenium để khởi chạy phiên bản Headless Chrome. Selenium mô phỏng trình duyệt – nó mở ra và chuyển đến trang web. Quét bằng Selenium sẽ mang lại cho bạn tỉ lệ thành công cao hơn. Nếu muốn bắt đầu tìm kiếm Instagram một cách an toàn, bạn cũng phải cân nhắc việc ẩn địa chỉ IP của mình vì nền tảng này giới hạn lượng thông tin mà một người có thể truy cập mà không cần đăng nhập. Cách tốt nhất để làm như vậy là sử dụng một máy chủ proxy xoay IP. Tùy thuộc vào nhà cung cấp proxy của bạn, nó sẽ cung cấp cho bạn một IP khác sau mỗi một khoảng thời gian nhất định.
Đây là một ví dụ thực tế về sử dụng proxy. Chúng tôi sẽ xóa tên người dùng Instagram bằng tham số __a=1 có thể biến bất kỳ trang nào thành định dạng JSON. Trong hướng dẫn này, tham số sẽ trả về nội dung từ trang tiểu sử.
Proxy xoay IP sẽ cung cấp một IP mới sau một thời gian nhất định
Bước 1.
Bắt đầu bằng cách cài đặt Selenium, Chromedriver và Selenium-Stealth.
1) Đầu tiên, nhập webdriver từ mô-đun Selenium.
from selenium import webdriver
2) Sau đó, nhập trình điều khiển web bằng mô-đun bộ chọn By từ Selenium để đơn giản hóa việc lựa chọn
from selenium.webdriver.common.by import By
3) In ra kết quả để định dạng đầu ra của bàn điều khiển.
from selenium.webdriver.common.by import By
Khi chúng tôi sẽ sử dụng mô-đun JSON, bạn cũng sẽ cần nhập mô-đun đó.
import json
4) Sau đó, nhập Selenium-Stealth để có một trình duyệt trông giống thật hơn.
from selenium_stealth import stealth
Bước 2.
Thiết lập tên người dùng của các cấu hình Instagram mà bạn muốn xóa.
Tạo một biến cho proxy của bạn, nó sẽ giúp bạn đạt được tỷ lệ thành công cao hơn.
proxy = "server:port"
Bạn có thể tạo một biến mới để lưu trữ các kết quả đã loại bỏ.
output = {}
Bước 3.
Sau đó, viết phần đầu của mã, gọi hàm main() và thêm một dòng khác để in ra kết quả bản ghi của bạn sau khi hoàn tất.
if __name__ == '__main__':
main()
pprint(output)
Viết mã để lặp lại tên người dùng mà bạn sẽ quét. Hàm main() sẽ lặp qua danh sách tên người dùng Instagram và gửi nó đến một hàmkhác.
def main():
for username in usernames:
scrape(username)
Bước 4.
Tiếp theo, bạn sẽ cần xác định chức năng bằng cách thực hiện theo các bước sau:
1) Tạo một chức năng mới. Nó sẽ cho phép bạn thực hiện các thay đổi đối với cài đặt trình duyệt trước mỗi lần quét, chẳng hạn như thay đổi tác nhân người dùng hoặc xoay proxy.
7) Trở lại trình điều khiển Chrome với tất cả các tùy chọn và cài đặt bạn đã thiết lập cho đến nay.
return driver
Bước 5.
Bây giờ hãy chuyển sang phần quét.
1) Tạo một chức năng mới. Hàm scrape() chỉ yêu cầu một đối số duy nhất – tên người dùng mà bạn đã chuyển từ vòng lặp trong hàm main().
def scrape(username):
2) Xây dựng một URL. Việc thêm ?__a=1&__d=dis vào cuối cho phép bạn nhận phản hồi trực tiếp từ chương trình phụ trợ của Instagram mà không cần phân tích cú pháp nội dung HTML.
3) Sau đó gọi hàm prepare_browser() và gán trình điều khiển cho một biến.
chrome = prepare_browser()
4) Mở trình duyệt và đưa ra yêu cầu.
chrome.get(url)
5) Để biết liệu yêu cầu có thất bại hay không, bạn cần kiểm tra xem bạn có được chuyển hướng đến thông tin đăng nhập hay không. Bạn có thể làm điều đó bằng cách xem chuỗi đăng nhập – nếu chuỗi đó xuất hiện trong URL thì yêu cầu không thành công. Chức năng thử lại bổ sung có thể được thêm vào đây để thử xóa tên người dùng sau này.
print (f"Attempting: {chrome.current_url}")
if "login" in chrome.current_url:
print ("Failed/ redir to login")
chrome.quit()
6) Nếu không, yêu cầu đã thành công. Điều này có nghĩa là chúng ta có thể trích xuất nội dung văn bản từ phản hồi và phân tích cú pháp dưới dạng JSON. Sau đó, kết quả có thể được chuyển đến hàm parse_data() cùng với tên người dùng Instagram mà bạn đã thu thập.
Hãy chuyển sang phân tích dữ liệu. Tạo hàm parse_data() đã đề cập để lấy dữ liệu bạn muốn từ phản hồi JSON.
def parse_data(username, user_data):
Ví dụ: bạn có thể lấy một số chú thích bài đăng từ các bài đăng công khai.
captions = []
if len(user_data['edge_owner_to_timeline_media']['edges']) > 0:
for node in user_data['edge_owner_to_timeline_media']['edges']:
if len(node['node']['edge_media_to_caption']['edges']) > 0:
if node['node']['edge_media_to_caption']['edges'][0]['node']['text']:
captions.append(
node['node']['edge_media_to_caption']['edges'][0]['node']['text']
)
Ngoài chú thích bài đăng, bạn có thể biết tên đầy đủ của người dùng, danh mục họ thuộc về và số lượng người theo dõi họ có. Tất cả thông tin này cuối cùng có thể được ghi vào từ điển đầu ra.
from selenium import webdriver
from selenium.webdriver.common.by import By
from pprint import pprint
import json
from selenium_stealth import stealth
usernames = ["jlo", "shakira", "beyonce", "katyperry"]
output = {}
def prepare_browser():
chrome_options = webdriver.ChromeOptions()
proxy = "server:port"
chrome_options.add_argument(f'--proxy-server={proxy}')
chrome_options.add_argument("start-maximized")
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options= chrome_options)
stealth(driver,
user_agent= 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36',
languages= ["en-US", "en"],
vendor= "Google Inc.",
platform= "Win32",
webgl_vendor= "Intel Inc.",
renderer= "Intel Iris OpenGL Engine",
fix_hairline= False,
run_on_insecure_origins= False,
)
return driver
def parse_data(username, user_data):
captions = []
if len(user_data['edge_owner_to_timeline_media']['edges']) > 0:
for node in user_data['edge_owner_to_timeline_media']['edges']:
if len(node['node']['edge_media_to_caption']['edges']) > 0:
if node['node']['edge_media_to_caption']['edges'][0]['node']['text']:
captions.append(
node['node']['edge_media_to_caption']['edges'][0]['node']['text']
)
output[username] = {
'name': user_data['full_name'],
'category': user_data['category_name'],
'followers': user_data['edge_followed_by']['count'],
'posts': captions,
}
def scrape(username):
url = f'https://instagram.com/{username}/?__a=1&__d=dis'
chrome = prepare_browser()
chrome.get(url)
print (f"Attempting: {chrome.current_url}")
if "login" in chrome.current_url:
print ("Failed/ redir to login")
chrome.quit()
else:
print ("Success")
resp_body = chrome.find_element(By.TAG_NAME, "body").text
data_json = json.loads(resp_body)
user_data = data_json['graphql']['user']
parse_data(username, user_data)
chrome.quit()
def main():
for username in usernames:
scrape(username)
if __name__ == '__main__':
main()
pprint(output)
Với 6 bước chi tiết ở trên, bạn có thể thực hiện việc thu thập dữ liệu về profile của các tài khoản Instagram bằng Selenium. Có thể thấy việc Instagram Scraping nếu sử dụng đúng công cụ, thu thập đúng loại dữ liệu được cho phép sẽ hoàn toàn không gây ra bất kì vấn đề nào. Hãy chia sẻ về quá trình trải nghiệm scraping của bạn trong phần bình luận của bài viết này. Chúc các bạn thành công!
Trong môi trường kinh doanh trên Amazon, việc sử dụng Proxy cho Amazon là một chiến lược thiết yếu để quản lý nhiều tài khoản và tránh rủi ro đình chỉ. Thông báo “liên quan đến một tài khoản khác” có thể gây ảnh hưởng nghiêm trọng đến hoạt động kinh doanh bạn đã dày […]
Trong thế giới MMO (Make Money Online) đầy cạnh tranh, việc sở hữu và quản lý nhiều tài khoản trên các nền tảng như Facebook, Google, eBay, hay Amazon không còn là lợi thế, mà đã trở thành yêu cầu bắt buộc. Tuy nhiên, đi kèm với đó là một nỗi ám ảnh thường trực: […]
Trong Phần 1 và Phần 2, chúng ta đã xây dựng nền tảng hệ thống ghi log traffic quảng cáo với HAProxy, bao gồm cài đặt, cấu hình log cơ bản, lọc dữ liệu với ACLs, định tuyến và quản lý vòng đời log bằng Logrotate. Bây giờ, chúng ta sẽ chuyển sang giai đoạn […]
Bài viết trước đã hướng dẫn cài đặt HAProxy và cấu hình ghi log cơ bản. Tuy nhiên, việc thu thập tất cả dữ liệu log có thể dẫn đến file log khổng lồ, khó quản lý và phân tích. Phần này sẽ đi sâu vào các kỹ thuật nâng cao để kiểm soát và […]
Trong thời đại số, việc hiểu rõ lưu lượng truy cập (traffic) là chìa khóa để tối ưu hóa mọi chiến dịch quảng cáo và đảm bảo hiệu suất hệ thống. Đặc biệt, với những hệ thống xử lý lượng lớn traffic quảng cáo, việc ghi lại và phân tích log trở nên vô cùng […]
Sau khi thiết lập định dạng log chuẩn và áp dụng các kỹ thuật lọc, xoay vòng hiệu quả trong hai bài viết trước, giờ đây bạn đã có trong tay một nguồn dữ liệu ghi log quảng cáo sạch, giàu thông tin và sẵn sàng để khai thác. Đây chính là thời điểm để […]