使用Python和Selenium抓取Twitter推文教程

使用Python和Selenium抓取Twitter推文

高效的數據抓取
使用我們的Python和Selenium集成工具解鎖Twitter數據的潛力!自動化數據收集流程,利用強大的方法監控瀏覽器活動,輕鬆捕獲請求和響應,優化您的抓取任務。

高級推文篩選
利用Twitter的高級搜尋功能,定位符合您標準的特定推文。您可以按關鍵詞、日期和標籤進行過濾,確保數據採集的相關性和精準性。

步驟1:設置環境

首先,安裝Selenium,它可以幫助我們自動化瀏覽器操作:

pip install -r requirements.txt

步驟2:下載ChromeDriver

您可以從這裡下載相應的ChromeDriver download chromeDriver

步驟3:運行Chrome進行測試

該步驟用於調試以查看效果。如果您不想看到,可以跳過此步驟。

@echo off
start C:\software\chrome-win64\chrome.exe --remote-debugging-port=9223

步驟4:設置Chrome選項

self.options = webdriver.ChromeOptions()
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'
self.options.add_argument(f'user-agent={user_agent}')
self.options.add_argument('--disable-gpu')
self.options.add_argument('--no-sandbox')
self.options.add_argument('--disable-dev-shm-usage')

self.options.add_experimental_option("debuggerAddress", "localhost:9223")

js_script_name = modify_random_canvas_js()
self.browser = self.get_browser(script_files=[js_script_name], record_network_log=True, headless=True)

步驟5:使用Selenium搜尋推文數據

self.browser.switch_to.new_window('tab')
url = "https://x.com/explore"
self.browser.get(url=url)
search_box = self.browser.find_element(By.CSS_SELECTOR, '[data-testid="SearchBox_Search_Input"]')
search_box.send_keys(Keys.CONTROL + "a")  # Select all text
search_box.send_keys(Keys.DELETE)
self.browser.implicitly_wait(20)
search_box.send_keys(search_query)

# Press Enter to submit the search
search_box.send_keys(Keys.RETURN)
self.browser.implicitly_wait(1000)
second_div = self.browser.find_element(By.CSS_SELECTOR,'[data-testid="ScrollSnap-List"] [role="presentation"]:nth-of-type(2)')

步驟6:監控瀏覽器網絡響應

performance_log = self.browser.get_log("performance")
for packet in performance_log:

    msg = packet.get("message")
    message = json.loads(packet.get("message")).get("message")
    packet_method = message.get("method")

    if "Network" in packet_method and 'SearchTimeline' in msg:
        document_url = message['params'].get('documentURL')
        if (not document_url) or ('&f=live' not in document_url):
            continue
        request_id = message.get("params").get("requestId")

步驟7:從響應中提取數據

entries = json.loads(body)['data']['search_by_raw_query']['search_timeline']['timeline']['instructions'][0].get('entries', None)
if not entries:
    continue
for entry in entries:
    item_content = entry['content'].get('itemContent', None)
    if not item_content:
        continue
    tweet_result = entry['content']['itemContent']['tweet_results']['result']
    entry_id = entry['entryId']

步驟8:重要注意事項