使用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:重要注意事項
- 登錄Twitter然後獲取Twitter Cookie。How to get Twitter Cookie
- 您可以使用這裡的API here
- 您可以在這裡獲取完整代碼 here
- 加入我們的討論群!點擊這裡