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