HomeLập trìnhPythonQuét web bằng...

Quét web bằng Python – Cách cạo dữ liệu từ Twitter bằng Tweepy và Snscrape


Nếu bạn là người đam mê dữ liệu, có thể bạn sẽ đồng ý rằng một trong những nguồn dữ liệu thế giới thực phong phú nhất là phương tiện truyền thông xã hội. Các trang web như Twitter chứa đầy dữ liệu.

Bạn có thể sử dụng dữ liệu có được từ mạng xã hội theo một số cách, chẳng hạn như phân tích tình cảm (phân tích suy nghĩ của mọi người) về một vấn đề hoặc lĩnh vực cụ thể mà bạn quan tâm.

Có một số cách bạn có thể cạo (hoặc thu thập) dữ liệu từ Twitter. Và trong bài viết này, chúng ta sẽ xem xét hai trong số những cách đó: sử dụng Tweepy và Snscrape.

Chúng ta sẽ tìm hiểu một phương pháp để loại bỏ các cuộc trò chuyện công khai từ những người về một chủ đề thịnh hành cụ thể, cũng như các tweet từ một người dùng cụ thể.

Bây giờ không có gì khó chịu, chúng ta hãy bắt đầu.

Bây giờ, trước khi bắt đầu triển khai từng nền tảng, chúng ta hãy cố gắng nắm bắt những điểm khác biệt và giới hạn của từng nền tảng.

Tweepy

Tweepy là một thư viện Python để tích hợp với Twitter API. Vì Tweepy được kết nối với API Twitter, bạn có thể thực hiện các truy vấn phức tạp ngoài việc thu thập các tweet. Nó cho phép bạn tận dụng tất cả các khả năng của Twitter API.

Nhưng có một số nhược điểm – như thực tế là API tiêu chuẩn của nó chỉ cho phép bạn thu thập các tweet trong tối đa một tuần (nghĩa là Tweepy không cho phép khôi phục các tweet sau khoảng thời gian một tuần, do đó, việc truy xuất dữ liệu lịch sử không được phép).

Ngoài ra, có giới hạn về số lượng tweet bạn có thể truy xuất từ ​​tài khoản của người dùng. Bạn có thể đọc thêm về các chức năng của Tweepy tại đây.

cạo

Snscrape là một cách tiếp cận khác để thu thập thông tin từ Twitter mà không yêu cầu sử dụng API. Snscrape cho phép bạn cạo thông tin cơ bản như hồ sơ người dùng, nội dung tweet, nguồn, v.v.

Snscrape không chỉ giới hạn ở Twitter mà còn có thể thu thập nội dung từ các mạng truyền thông xã hội nổi bật khác như Facebook, Instagram và các mạng khác.

Ưu điểm của nó là không có giới hạn về số lượng tweet bạn có thể truy xuất hoặc cửa sổ tweet (nghĩa là phạm vi ngày của tweet). Vì vậy, Snscrape cho phép bạn truy xuất dữ liệu cũ.

Nhưng một nhược điểm là nó thiếu tất cả các chức năng khác của Tweepy – tuy nhiên, nếu bạn chỉ muốn cạo các tweet, Snscrape là đủ.

Bây giờ chúng ta đã làm rõ sự khác biệt giữa hai phương pháp, hãy lần lượt xem xét cách triển khai của chúng.

Cách sử dụng Tweepy để cạo các Tweet

Trước khi chúng tôi bắt đầu sử dụng Tweepy, trước tiên chúng tôi phải đảm bảo rằng thông tin đăng nhập Twitter của chúng tôi đã sẵn sàng. Cùng với đó, chúng tôi có thể kết nối Tweepy với khóa API của mình và bắt đầu tìm kiếm.

Nếu bạn không có thông tin đăng nhập Twitter, bạn có thể đăng ký tài khoản nhà phát triển Twitter bằng cách truy cập đây. Bạn sẽ được hỏi một số câu hỏi cơ bản về cách bạn định sử dụng Twitter API. Sau đó, bạn có thể bắt đầu thực hiện.

Đọc thêm  Cách xây dựng API JSON bằng Python

Bước đầu tiên là cài đặt thư viện Tweepy trên máy cục bộ của bạn, bạn có thể thực hiện việc này bằng cách nhập:

pip install git+https://github.com/tweepy/tweepy.git

Cách cạo Tweets từ người dùng trên Twitter

Bây giờ chúng ta đã cài đặt thư viện Tweepy, hãy thu thập 100 tweet từ người dùng có tên john trên Twitter. Chúng ta sẽ xem xét việc triển khai mã đầy đủ sẽ cho phép chúng ta làm điều này và thảo luận chi tiết về nó để chúng ta có thể nắm bắt được những gì đang diễn ra:

import tweepy

consumer_key = "XXXX" #Your API/Consumer key 
consumer_secret = "XXXX" #Your API/Consumer Secret Key
access_token = "XXXX"    #Your Access token key
access_token_secret = "XXXX" #Your Access token Secret key

#Pass in our twitter API authentication key
auth = tweepy.OAuth1UserHandler(
    consumer_key, consumer_secret,
    access_token, access_token_secret
)

#Instantiate the tweepy API
api = tweepy.API(auth, wait_on_rate_limit=True)


username = "john"
no_of_tweets =100


try:
    #The number of tweets we want to retrieved from the user
    tweets = api.user_timeline(screen_name=username, count=no_of_tweets)
    
    #Pulling Some attributes from the tweet
    attributes_container = [[tweet.created_at, tweet.favorite_count,tweet.source,  tweet.text] for tweet in tweets]

    #Creation of column list to rename the columns in the dataframe
    columns = ["Date Created", "Number of Likes", "Source of Tweet", "Tweet"]
    
    #Creation of Dataframe
    tweets_df = pd.DataFrame(attributes_container, columns=columns)
except BaseException as e:
    print('Status Failed On,',str(e))
    time.sleep(3)

Bây giờ chúng ta hãy xem qua từng phần của mã trong khối trên.

import tweepy

consumer_key = "XXXX" #Your API/Consumer key 
consumer_secret = "XXXX" #Your API/Consumer Secret Key
access_token = "XXXX"    #Your Access token key
access_token_secret = "XXXX" #Your Access token Secret key

#Pass in our twitter API authentication key
auth = tweepy.OAuth1UserHandler(
    consumer_key, consumer_secret,
    access_token, access_token_secret
)

#Instantiate the tweepy API
api = tweepy.API(auth, wait_on_rate_limit=True)

Trong đoạn mã trên, chúng tôi đã nhập thư viện Tweepy vào mã của mình, sau đó chúng tôi đã tạo một số biến để lưu trữ thông tin đăng nhập Twitter của mình (Trình xử lý xác thực Tweepy yêu cầu bốn thông tin đăng nhập Twitter của chúng tôi). Vì vậy, sau đó chúng tôi chuyển các biến đó vào trình xử lý xác thực Tweepy và lưu chúng vào một biến khác.

Sau đó, câu lệnh gọi cuối cùng là nơi chúng tôi khởi tạo API Tweepy và chuyển các tham số yêu cầu.

username = "john"
no_of_tweets =100


try:
    #The number of tweets we want to retrieved from the user
    tweets = api.user_timeline(screen_name=username, count=no_of_tweets)
    
    #Pulling Some attributes from the tweet
    attributes_container = [[tweet.created_at, tweet.favorite_count,tweet.source,  tweet.text] for tweet in tweets]

    #Creation of column list to rename the columns in the dataframe
    columns = ["Date Created", "Number of Likes", "Source of Tweet", "Tweet"]
    
    #Creation of Dataframe
    tweets_df = pd.DataFrame(attributes_container, columns=columns)
except BaseException as e:
    print('Status Failed On,',str(e))

Trong đoạn mã trên, chúng tôi đã tạo tên của người dùng (tên @ trong Twitter) mà chúng tôi muốn truy xuất các tweet từ đó và cả số lượng tweet. Sau đó, chúng tôi đã tạo một trình xử lý ngoại lệ để giúp chúng tôi bắt lỗi theo cách hiệu quả hơn.

Sau đó, api.user_timeline() trả về một bộ sưu tập các tweet gần đây nhất được đăng bởi người dùng mà chúng tôi đã chọn trong screen_name tham số và số lượng tweet bạn muốn truy xuất.

Trong dòng mã tiếp theo, chúng tôi đã chuyển một số thuộc tính mà chúng tôi muốn truy xuất từ ​​mỗi tweet và lưu chúng vào một danh sách. Để xem thêm các thuộc tính bạn có thể truy xuất từ ​​một tweet, hãy đọc cái này.

Trong đoạn mã cuối cùng, chúng tôi đã tạo một khung dữ liệu và chuyển vào danh sách mà chúng tôi đã tạo cùng với tên của cột mà chúng tôi đã tạo.

Lưu ý rằng tên cột phải theo thứ tự cách bạn chuyển chúng vào vùng chứa thuộc tính (nghĩa là cách bạn chuyển các thuộc tính đó vào danh sách khi bạn truy xuất thuộc tính từ tweet).

Nếu bạn thực hiện đúng các bước tôi đã mô tả, bạn sẽ có một cái gì đó như thế này:

hinh-17
Hình ảnh của tác giả

Bây giờ chúng ta đã hoàn tất, hãy xem qua một ví dụ nữa trước khi chuyển sang triển khai Snscrape.

Đọc thêm  Cách trích xuất từ ​​khóa từ văn bản bằng TF-IDF và Python's Scikit-Learn

Trong phương pháp này, chúng tôi sẽ truy xuất một tweet dựa trên tìm kiếm. Bạn có thể làm điều đó như thế này:

import tweepy

consumer_key = "XXXX" #Your API/Consumer key 
consumer_secret = "XXXX" #Your API/Consumer Secret Key
access_token = "XXXX"    #Your Access token key
access_token_secret = "XXXX" #Your Access token Secret key

#Pass in our twitter API authentication key
auth = tweepy.OAuth1UserHandler(
    consumer_key, consumer_secret,
    access_token, access_token_secret
)

#Instantiate the tweepy API
api = tweepy.API(auth, wait_on_rate_limit=True)


search_query = "sex for grades"
no_of_tweets =150


try:
    #The number of tweets we want to retrieved from the search
    tweets = api.search_tweets(q=search_query, count=no_of_tweets)
    
    #Pulling Some attributes from the tweet
    attributes_container = [[tweet.user.name, tweet.created_at, tweet.favorite_count, tweet.source,  tweet.text] for tweet in tweets]

    #Creation of column list to rename the columns in the dataframe
    columns = ["User", "Date Created", "Number of Likes", "Source of Tweet", "Tweet"]
    
    #Creation of Dataframe
    tweets_df = pd.DataFrame(attributes_container, columns=columns)
except BaseException as e:
    print('Status Failed On,',str(e))

Đoạn mã trên tương tự như đoạn mã trước, ngoại trừ việc chúng tôi đã thay đổi phương thức API từ api.user_timeline() đến api.search_tweets(). Chúng tôi cũng đã thêm tweet.user.name vào danh sách vùng chứa thuộc tính.

Trong đoạn mã trên, bạn có thể thấy rằng chúng tôi đã chuyển vào hai thuộc tính. Điều này là do nếu chúng ta chỉ vượt qua tweet.user, nó sẽ chỉ trả về một đối tượng người dùng từ điển. Vì vậy, chúng ta cũng phải chuyển vào một thuộc tính khác mà chúng ta muốn truy xuất từ ​​đối tượng người dùng, đó là name.

Bạn có thể đi đây để xem danh sách các thuộc tính bổ sung mà bạn có thể truy xuất từ ​​đối tượng người dùng. Bây giờ bạn sẽ thấy một cái gì đó như thế này khi bạn chạy nó:

hinh-18
Hình ảnh của tác giả.

Được rồi, đó chỉ là kết thúc quá trình triển khai Tweepy. Chỉ cần nhớ rằng có giới hạn về số lượng tweet bạn có thể truy xuất và bạn không thể truy xuất các tweet đã hơn 7 ngày tuổi bằng Tweepy.

Cách sử dụng Snscrape để cạo các Tweet

Như tôi đã đề cập trước đây, Snscrape không yêu cầu thông tin đăng nhập Twitter (khóa API) để truy cập nó. Cũng không có giới hạn về số lượng tweet bạn có thể tìm nạp.

Tuy nhiên, đối với ví dụ này, chúng tôi sẽ chỉ truy xuất các tweet giống như trong ví dụ trước nhưng sử dụng Snscrape để thay thế.

Để sử dụng Snscrape, trước tiên chúng ta phải cài đặt thư viện của nó trên PC. Bạn có thể làm điều đó bằng cách gõ:

pip3 install git+https://github.com/JustAnotherArchivist/snscrape.git

Cách cạo các Tweet từ người dùng bằng Snscrape

Snscrape bao gồm hai phương pháp để nhận các tweet từ Twitter: giao diện dòng lệnh (CLI) và Python Wrapper. Chỉ cần lưu ý rằng Trình bao bọc Python hiện không có giấy tờ – nhưng chúng ta vẫn có thể xử lý bằng phương pháp thử và sai.

Trong ví dụ này, chúng tôi sẽ sử dụng Trình bao bọc Python vì nó trực quan hơn phương thức CLI. Nhưng nếu bạn gặp khó khăn với một số mã, bạn luôn có thể chuyển sang cộng đồng GitHub để được hỗ trợ. Những người đóng góp sẽ sẵn lòng giúp đỡ bạn.

Để truy xuất các tweet từ một người dùng cụ thể, chúng ta có thể làm như sau:

import snscrape.modules.twitter as sntwitter
import pandas as pd

# Created a list to append all tweet attributes(data)
attributes_container = []

# Using TwitterSearchScraper to scrape data and append tweets to list
for i,tweet in enumerate(sntwitter.TwitterSearchScraper('from:john').get_items()):
    if i>100:
        break
    attributes_container.append([tweet.date, tweet.likeCount, tweet.sourceLabel, tweet.content])
    
# Creating a dataframe from the tweets list above 
tweets_df = pd.DataFrame(attributes_container, columns=["Date Created", "Number of Likes", "Source of Tweet", "Tweets"])

Hãy xem qua một số mã mà bạn có thể không hiểu ngay từ cái nhìn đầu tiên:

for i,tweet in enumerate(sntwitter.TwitterSearchScraper('from:john').get_items()):
    if i>100:
        break
    attributes_container.append([tweet.date, tweet.likeCount, tweet.sourceLabel, tweet.content])
    
  
# Creating a dataframe from the tweets list above 
tweets_df = pd.DataFrame(attributes_container, columns=["Date Created", "Number of Likes", "Source of Tweet", "Tweets"])

Đọc thêm  Sử dụng máy học và phân tích dữ liệu để khám phá thuốc

Trong đoạn mã trên, cái gì sntwitter.TwitterSearchScaper thực hiện là trả về một đối tượng gồm các tweet từ tên của người dùng mà chúng tôi đã chuyển vào đó (là john).

Như tôi đã đề cập trước đó, Snscrape không có giới hạn về số lượng tweet nên nó sẽ trả về bao nhiêu tweet từ người dùng đó. Để giải quyết vấn đề này, chúng ta cần thêm hàm liệt kê sẽ lặp qua đối tượng và thêm bộ đếm để chúng ta có thể truy cập 100 tweet gần đây nhất từ ​​người dùng.

Bạn có thể thấy rằng cú pháp thuộc tính mà chúng tôi nhận được từ mỗi tweet giống như cú pháp từ Tweepy. Đây là danh sách các thuộc tính mà chúng tôi có thể nhận được từ tweet Snscrape do Martin Beck quản lý.

Sns.Scrape
Tín dụng: Martin Beck

Nhiều thuộc tính có thể được thêm vào vì thư viện Snscrape vẫn đang được phát triển. Ví dụ như trong hình trên, source đã được thay thế bằng sourceLabel. Nếu bạn chỉ vượt qua source nó sẽ trả về một đối tượng.

Nếu bạn chạy đoạn mã trên, bạn cũng sẽ thấy một cái gì đó như thế này:

hình ảnh-19
Hình ảnh của tác giả

Bây giờ hãy làm tương tự để tìm kiếm.

Cách cạo các Tweet từ tìm kiếm văn bản bằng Snscrape

import snscrape.modules.twitter as sntwitter
import pandas as pd

# Creating list to append tweet data to
attributes_container = []

# Using TwitterSearchScraper to scrape data and append tweets to list
for i,tweet in enumerate(sntwitter.TwitterSearchScraper('sex for grades since:2021-07-05 until:2022-07-06').get_items()):
    if i>150:
        break
    attributes_container.append([tweet.user.username, tweet.date, tweet.likeCount, tweet.sourceLabel, tweet.content])
    
# Creating a dataframe to load the list
tweets_df = pd.DataFrame(attributes_container, columns=["User", "Date Created", "Number of Likes", "Source of Tweet", "Tweet"])

Một lần nữa, bạn có thể truy cập nhiều dữ liệu lịch sử bằng Snscrape (không giống như Tweepy, vì API tiêu chuẩn của nó không thể vượt quá 7 ngày. API cao cấp là 30 ngày.). Vì vậy, chúng tôi có thể chuyển ngày mà chúng tôi muốn bắt đầu tìm kiếm và ngày chúng tôi muốn nó kết thúc trong sntwitter.TwitterSearchScraper() phương pháp.

Những gì chúng ta đã làm trong đoạn mã trước về cơ bản là những gì chúng ta đã thảo luận trước đó. Điều duy nhất cần lưu ý là cho đến khi hoạt động tương tự như hàm phạm vi trong Python (nghĩa là nó loại trừ số nguyên cuối cùng). Vì vậy, nếu bạn muốn nhận các tweet từ hôm nay, bạn cần thêm ngày hôm sau vào tham số “until”.

hinh-21
Ảnh Tác giả.

Bây giờ bạn cũng biết cách cạo các tweet bằng Snscrape!

Khi nào nên sử dụng từng phương pháp

Bây giờ chúng ta đã biết cách thức hoạt động của từng phương pháp, bạn có thể tự hỏi khi nào nên sử dụng phương pháp nào.

Chà, không có quy tắc chung nào về thời điểm sử dụng từng phương pháp. Mọi thứ phụ thuộc vào sở thích vấn đề và trường hợp sử dụng của bạn.

Nếu bạn muốn có vô số tweet, bạn nên sử dụng Snscrape. Nhưng nếu bạn muốn sử dụng các tính năng bổ sung mà Snscrape không thể cung cấp (chẳng hạn như định vị địa lý), thì bạn chắc chắn nên sử dụng Tweepy. Nó được tích hợp trực tiếp với Twitter API và cung cấp đầy đủ chức năng.

Mặc dù vậy, Snscrape là phương pháp được sử dụng phổ biến nhất để cạo cơ bản.

Trong bài viết này, chúng ta đã học cách cạo dữ liệu từ Python bằng Tweepy và Snscrape. Nhưng đây chỉ là một tổng quan ngắn gọn về cách thức hoạt động của từng phương pháp. Bạn có thể tìm hiểu thêm bằng cách khám phá trang web để biết thêm thông tin.

Tôi đã bao gồm một số tài nguyên hữu ích mà bạn có thể sử dụng nếu cần thêm thông tin. Cảm ơn bạn đã đọc.

GitHub – JustAnotherArchivist/snscrape: Trình quét dịch vụ mạng xã hội bằng Python

Một công cụ quét dịch vụ mạng xã hội bằng Python. Đóng góp cho sự phát triển của JustAnotherArchivist/snscrape bằng cách tạo một tài khoản trên GitHub.

snscrape

Tài liệu Tweepy — tài liệu tweepy 4.10.0

Cách cạo Tweet bằng snscrape

Twitter đã giới thiệu các thay đổi đối với API của họ đã khiến các thư viện quét tweet khác nhau trở nên lỗi thời. Trong hướng dẫn này, tôi đề cập đến snscrape như một giải pháp thay thế khả thi.

1*zMclXvBcpFn5VAolfFMdiA





Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status