Chouti アンケート自動投票システムの構築方法

1. アンケート自動投票の仕組み

Choutiプラットフォーム上のアンケート投票を自動化するための基本的な仕組みを説明します。

この仕組みでは、ブラウザ操作とHTTPリクエストを組み合わせて投票を実行します。


'ログインと投票の実行'
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By

# ChromeDriverの初期化
browser = webdriver.Chrome()

# Choutiサイトへのアクセス
browser.get('https://dig.chouti.com/')
browser.implicitly_wait(10)
browser.maximize_window()

# ログイン操作
login_button = browser.find_element(By.ID, 'login_btn')
login_button.click()

username_input = browser.find_element(By.CSS_SELECTOR, 'body > div.login-dialog.dialog.animated2.scaleIn > div > div.login-body > div.form-item.login-item.clearfix.phone-item.mt24 > div.input-item.input-item-short.left.clearfix > input')
password_input = browser.find_element(By.CSS_SELECTOR, 'body > div.login-dialog.dialog.animated2.scaleIn > div > div.login-footer > div.form-item.login-item.clearfix.mt22 > div > input.input.pwd-input.pwd-password-input')

# ユーザー認証情報の入力
username_input.send_keys('登録済み電話番号')
time.sleep(2)
password_input.send_keys('パスワード')
time.sleep(2)

# ログイン実行
login_confirm = browser.find_element(By.CSS_SELECTOR, 'body > div.login-dialog.dialog.animated2.scaleIn > div > div.login-footer > div:nth-child(4) > button')
login_confirm.click()

# 手動認証待ち
input('ログイン完了を確認後、Enterキーを押してください')

# Cookieの保存
cookies = browser.get_cookies()
print("保存されたCookie:", cookies)
with open('chouti_session.json', 'w', encoding='utf-8') as f:
    json.dump(cookies, f)

# ブラウザの終了
time.sleep(5)
browser.close()

2. 投票処理の実行

保存したCookieを利用して投票処理を自動化します。


'投票処理の実行'
import requests
from bs4 import BeautifulSoup
import json

# クッキー情報の読み込み
with open('chouti_session.json', 'r', encoding='utf-8') as f:
    session_cookies = json.load(f)
cookies_dict = {cookie['name']: cookie['value'] for cookie in session_cookies}

# HTTPヘッダーの設定
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
    'Referer': 'https://dig.chouti.com/'
}

# 投票対象の取得
response = requests.get('https://dig.chouti.com/', headers=headers)
soup = BeautifulSoup(response.text, 'lxml')
article_divs = soup.find_all('div', class_='link-item')

# 投票処理
for article in article_divs:
    article_id = article.get('data-id')
    if article_id:
        vote_data = {'linkId': article_id}
        vote_response = requests.post('https://dig.chouti.com/link/vote', 
                                    headers=headers, 
                                    cookies=cookies_dict, 
                                    data=vote_data)
        print("投票結果:", vote_response.text)

3. XPathの基本操作

Webページの要素を検索するためのXPathの基本使用方法を解説します。


from lxml import etree

sample_html = """
<html>
 <head>
  <base href='http://example.com/' />
  <title>例サイト</title>
 </head>
 <body>
  <div id='images'>
   <a href='image1.html' id='id_a' name='lqz'>例画像1 <br /><img src='image1_thumb.jpg' /></a>
   <a href='image2.html'>例画像2 <br /><img src='image2_thumb.jpg' /></a>
   <a href='image3.html'>例画像3 <br /><img src='image3_thumb.jpg' /></a>
   <a href='image4.html'  class='li'>例画像4 <br /><img src='image4_thumb.jpg' /></a>
   <a href='image5.html' class='li li-item' name='items'>例画像5 <br /><img src='image5_thumb.jpg' /></a>
   <a href='image6.html' name='items'><span><h5>test</h5></span>例画像6 <br /><img src='image6_thumb.jpg' /></a>
  </div>
 </body>
</html>
"""

html_tree = etree.HTML(sample_html)

# 要素検索の基本例
print("すべてのa要素:", html_tree.xpath('//a'))
print("最初のa要素のhref属性:", html_tree.xpath('//a[1]/@href'))
print("画像4のa要素:", html_tree.xpath('//a[@class="li"]'))
print("画像5のa要素:", html_tree.xpath('//a[contains(@class,"li")]'))

4. クラウド画像認識APIの利用

サイトの認証画像を自動認識するためのAPI連携方法を解説します。


import requests
from hashlib import md5

class ImageRecognitionClient:
    def __init__(self, username, password, app_id):
        self.username = username
        password_hash = md5(password.encode('utf8')).hexdigest()
        self.app_id = app_id
        self.base_params = {
            'user': self.username,
            'pass2': password_hash,
            'softid': self.app_id,
        }

    def recognize_image(self, image_path, codetype=1902):
        with open(image_path, 'rb') as f:
            image_data = f.read()
        params = {
            'codetype': codetype,
        }
        params.update(self.base_params)
        files = {'userfile': ('captcha.jpg', image_data)}
        response = requests.post('http://upload.chaojiying.net/Upload/Processing.php', 
                               data=params, 
                               files=files)
        return response.json()

# 画像認識のテスト
if __name__ == '__main__':
    client = ImageRecognitionClient('APIユーザー名', 'APIパスワード', 'APIアプリID')
    result = client.recognize_image('captcha.jpg')
    print("認識結果:", result)

5. Scrapy フレームワークの導入

Webスクレイピングに特化したScrapy フレームワークの導入方法を解説します。


# Scrapyのインストール
pip install scrapy

# プロジェクトの作成
scrapy startproject webcrawler

# スパイダーの作成
scrapy genspider example_spider example.com

# スパイダーの実行
scrapy crawl example_spider --nolog

タグ: Chouti 抽屉アンケート XPath Selenium Scrapy

6月28日 18:43 投稿