Blogブログ

2023.08.21

スクレイピングの依頼を考えているなら10000%ここ。

スクレイピングの依頼はどこにすればいいのか。

まず、スクレイピングの依頼について、ログインが必要なサイトだったり、IPブロックやパズル認証が発動するサイトだったり、
数秒で何十リクエストもするとブロックされるサイトだったり、ロボットのときだけ違うサイトを見せてくるサイトだったりと、
難易度の多少高いスクレイピングを依頼するのではない場合、

基本的にスクレイピングはめっちゃ簡単なのでいちいち依頼しなくても自分でやるのが良いと思います。

(難しいスクレイピングはやはり慣れてる会社さんに依頼した方がいいです)
例えばこの会社のエンジニアは過去にGoogleに関わっていたこともあり、取れないものはない良いスクレイピング会社でした。こちらのスクレイピング会社ですが、
リンクを踏むとパラメーターとかも入れてないので純粋に紹介しています。

弊社もスクレイピングで取れないものはないと思います。

過去には不動産業界の大手全ての物件をスクレピングしたり、
グルメサイトを全て取り切ったり、
40サイトの求人サイトから全ての求人をスクレイピングしてみたり、
いろいろと依頼されてなくてもデータ分析のためにスクレイピングをやったことがあり、
実際に取り切りました。

が、スクレイピングは簡単なのであまり興味がなく依頼はあまり受けていません。
依頼はさっきのこの会社とかがいいです。
直接スクレイピングの依頼をしていたいても良いですが、
割と仲がいい会社なので、安く紹介して欲しいよという人はcontactから連絡ください。

過去にちょっと頑張って、あるエリアのホテルの部屋を宿泊事業も民泊も含めて全て部屋タイプと価格をスクレイピングして データ分析をしたことがあります。弊社の関連会社で東京大学母体の研究機関と産学連携でプロダクトを作ったこともありました。

余談ですがホテルの部屋の価格ってスクレイピングするのは結構大変です。
ホテルの部屋の価格って、半年後の価格と、1週間前の価格と当日の価格って違いますよね。
ドームでイベントがある日は未来でも部屋の価格は高いし、
もちろんそもそも週末はいつも高い。

この前札幌支店に行った時に土日なのにapaホテルで2万とかして死ぬかと思いました。

平日は6000円でした。

このように需要と供給で価格が変動するので、毎日毎日スクレイピングする必要があるんですよね。

しかも、本当に比較しようとしたら、100平米の部屋と16平米の部屋だと価格差があるのは当たり前なので、
価格を平米で割って、1平米あたりの価格を取得すると比較しやすいですよね。

エリア・部屋タイプ・部屋価格・総部屋数・予約部屋数で稼働率・観光地の有無
なども全てスクレイピングすると「ある場所にホテルを立てる時に、合理的に何部屋何平米でどの部屋タイプで週末料金と平日料金でいくらに設定すると稼働率が何%になると考えられる」ということがわかりますよね。
それを目的に分析をしていました。

特に依頼があったわけではないので1年くらいかけて地道にサーバー負荷をかけないように実施していました。
人が見てるのと同じ動きにしています。

さすがに需要予測の機械学習がからむのでその部分は依頼をして一緒に研究をしていました。

そのときは、ユーザの検索によってでてくるHTML構造が違うので
それを判断してとらないといけないことに気づかずに3ヶ月くらいのデータが無駄になったのはいい思い出です。

スクレイピングはこのようにレベルの高いものは依頼した方がいいです。

ただ、単純に世界中に公開されてる例えば法人番号を政府のサイトから取りたいとか、
適格事業者番号の登録があるかないかだけを判断したいとか
そういう簡単なやつは依頼せずに自分でやった方がいいかなって思います。

Google ColaboratoryでPythonでちょっと書くだけで取れちゃったりします。

簡単な案件にお金を払ってる業者さんは、
ほんとうは超簡単なものであるとしったらびっくりだと思います。

Googleでスクレイピングと調べると、
スクレイピング 案件
スクレイピング 案件初心者
スクレイピング 稼げない
スクレイピング ココナラ
Pythonスクレイピング副業
Pythonスクレイピング求人

とかのワードが目立ちますね。

ココナラってなんだ・・。
ちょっと調べてみます。

https://coconala.com/search?keyword=%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0

なるほど、お仕事サイトですね。
ここでスクレイピングを依頼してるわけですね。

いや、違いますね。これよく見ると
わたしたちにスクレイピングを依頼してください」っていうことですね。

なるほど。
驚きです。

けっこういるんですね。
なるほど〜
これらの人たち、一通り見ましたのでまとめます。

スクレイピングと依頼に関する幅広いサービス提供のニーズを満たす人がいるようですね

スクレイピングと依頼に関するサービス提供者は、
インターネット上の情報を収集し、業務の効率化や作業の自動化を実現するための多様な技術を駆使しています。
どれも簡単な案件に対応してるので、ちょっとしたものならやりますよってことですね。

データ収集・情報抽出の自動化:

1. データ収集・情報抽出の自動化:
PythonのライブラリのBeautiful SoupやRequests、Seleniumなどのツールを使用してるケースが多いですね。 あとでbeautiful soupを使った例を書いてみましょうか。
インフラで色々とやる必要がないなら、簡単にこれでもWeb上の情報を効率的に収集・抽出できます。
これにより、HTML構造を解析し、必要な情報を自動的に抽出することが可能なんですよね。

import requests
from bs4 import BeautifulSoup

url = 'https://example.com'

response = requests.get(url)
html = response.text

soup = BeautifulSoup(html, 'html.parser')

title = soup.title.text
print('ページのタイトル:', title)

links = soup.find_all('a')
for link in links:
    link_text = link.text
    link_href = link.get('href')
    print(f'リンクテキスト: {link_text}, リンクURL: {link_href}')

最小単位だとこんな感じですね。

業務の効率化と作業の自動化:

2. 業務の効率化と作業の自動化:
スクレイピングによって取得したデータは、PandasやOpenpyxlといったPythonのデータ操作ライブラリを使用して処理・整形されることがあります。ここまでやってくれるならいいですがなんかデフォルトでちょっとまとめるくらいのように見えますね。VBAを活用してExcel内の処理を自動化することで、作業の簡素化と効率化が実現してる方もいます。

たしかに、開発の世界にどっぷりいると「えーエクセル。。ですか。(そんなの自分でry)」と思ってしまいますが

客観的に考えてそんなことはないですね。面倒だしやってくれたらすごく嬉しいことだと思います。

簡単に例を書くとわかりやすいかもです。
取得したデータをPandasとOpenpyxlを使用して整形して、

さらにVBAを活用してExcel内の処理を自動化するとして、

例としてのウェブページからタイトルとリンクをスクレイピングし、それをExcelファイルに整形して保存みたいなやつで書いてみます。

import requests
from bs4 import BeautifulSoup
import pandas as pd
from openpyxl import Workbook
import os

url = 'https://example.com'

response = requests.get(url)
html = response.text

soup = BeautifulSoup(html, 'html.parser')

titles = []
links = []
for link in soup.find_all('a'):
    titles.append(link.text)
    links.append(link.get('href'))

data = {'タイトル': titles, 'リンク': links}
df = pd.DataFrame(data)

excel_file = 'scraped_data.xlsx'
df.to_excel(excel_file, index=False)

# ExcelファイルにVBAコードを追加して自動化
vba_code = """
Sub FormatData()
    Columns("A:B").AutoFit
End Sub
"""
wb = Workbook()
ws = wb.active
ws['A1'] = 'タイトル'
ws['B1'] = 'リンク'
for row in df.iterrows():
    ws.append(row[1])
ws.add_vba(vba_code)
vba_module = ws.create_vba_module('VBA_Module')
vba_module.code = vba_code
excel_with_macro = 'excel_with_macro.xlsm'
wb.save(excel_with_macro)
os.remove(excel_file)

ツールのカスタマイズと提供:

3. ツールのカスタマイズと提供:

みてみるとPythonのプログラム開発技術を活用して、特定のウェブサイトに特化したスクレイピングツールを開発する人もけっこういますね。また、GUIを組み込むこんで、簡単な操作にしてくれる人もいるようです。

スクレイピングツールにGUIを組み込む場合だと、
Pythonのtkinterとかを使ってると思います。
tkinterを使って簡単なGUIを作成れて、ユーザーが操作しやすいインターフェースを提供することができます。
ウェブサイトからタイトルとリンクをスクレイピングするツールに、tkinterを使ったGUIを追加する例だと、、


import requests
from bs4 import BeautifulSoup
import tkinter as tk
from tkinter import messagebox

def scrape_website():
    url = url_entry.get()
    try:
        response = requests.get(url)
        response.raise_for_status()
        html = response.text
        soup = BeautifulSoup(html, 'html.parser')

        titles = []
        links = []
        for link in soup.find_all('a'):
            titles.append(link.text)
            links.append(link.get('href'))

        result_text.delete(1.0, tk.END)
        for title, link in zip(titles, links):
            result_text.insert(tk.END, f"タイトル: {title}\nリンク: {link}\n\n")

    except requests.exceptions.RequestException as e:
        messagebox.showerror("エラー", f"Webサイトへのアクセスにエラーが発生しました:\n{e}")

# GUIの設定
root = tk.Tk()
root.title("スクレイピングツール")

url_label = tk.Label(root, text="ウェブサイトのURL:")
url_label.pack()

url_entry = tk.Entry(root)
url_entry.pack()

scrape_button = tk.Button(root, text="スクレイピング開始", command=scrape_website)
scrape_button.pack()

result_text = tk.Text(root, height=10, width=50)
result_text.pack()

root.mainloop()

こんな感じです。

データ解析と活用:

4. データ解析と活用:
スクレイピングで取得したデータは、MatplotlibやSeabornを使用して可視化して、
データの傾向やパターンを分析することが可能な人もいました。
Pythonの機械学習ライブラリを活用して予測モデルを構築するなど、
収集されたデータを活用した戦略的な意思決定が支援されます。
ここまでできる人ならフリーランスではなくておそらくしっかりと専門で働いてるひとの副業でしょうね。
(デフォルトの予想モデル入れるだけなら殴りますけど)

例えば、ウェブサイトから商品名と価格のデータをスクレイピングして
DataFrameに保存してMatplotlibとSeabornを使用して価格と商品名の関係を可視化してから
線形回帰モデルを用いて価格と商品位置の関係を予測し、実際のデータと予測モデルの比較を行う例だと、


import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# ウェブサイトからデータをスクレイピングしてDataFrameに保存
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

data = []
for item in soup.find_all('div', class_='item'):
    name = item.find('h2').text
    price = float(item.find('span', class_='price').text.replace('¥', '').replace(',', ''))
    data.append({'Name': name, 'Price': price})

df = pd.DataFrame(data)

# データの可視化
plt.figure(figsize=(10, 6))
sns.scatterplot(x='Price', y='Name', data=df)
plt.title('商品価格の分布')
plt.xlabel('価格')
plt.ylabel('商品名')
plt.show()

# 線形回帰モデルの構築と予測
X = df[['Price']]
y = df.index

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = LinearRegression()
model.fit(X_train, y_train)

predicted_y = model.predict(X_test)

plt.figure(figsize=(10, 6))
plt.scatter(X_test, y_test, color='blue', label='実際のデータ')
plt.plot(X_test, predicted_y, color='red', linewidth=2, label='予測モデル')
plt.title('価格と商品位置の関係')
plt.xlabel('価格')
plt.ylabel('商品位置')
plt.legend()
plt.show()

このように、スクレイピングで収集したデータを可視化し、

機械学習を用いて分析や予測を行うことで戦略的な意思決定を支援するコードが示されています。

まとめると、けっこう駆使してやってくれるんですね。
簡単なものなら依頼するのはいいかもですね。
品質が怖いですが実績がある人もいるっぽいので良いですね。

機械学習系の準備のための知識は
動画でまとめておきましたので社内用ですが見ておいてください。

動画タイトル リンク
前提知識 PandasとMatplotlibの基礎 動画リンク
データ分析1 – イントロダクション 動画リンク
データ分析2 – 探索的データの基礎(集計・可視化) 動画リンク
データ分析3 – 多変量解析の実践I (相関と回帰分析) 動画リンク
データ分析4 – 多変量解析の基礎II (主成分分析) 動画リンク
データ分析5 – 多変量解析の実践II(主成分分析) 動画リンク
データ分析6 – 多変量解析の基礎 Ⅲ (クラスタリング) 動画リンク
データ分析7 – 多変量解析の実践 Ⅲ (クラスタリング) 動画リンク
データ分析8 – 多変量解析の実践 Ⅳ 主成分分析とクラスタリング 動画リンク

さきほど、
Googleでスクレイピングと調べてみたところ
他にも
スクレイピング 案件初心者
スクレイピング 稼げない
pythonスクレイピング副業
というワードがあった
ので

スクレイピングの副業依頼ってそんなにあるのかな…
調べてみると..
「副業初心者がPythonで稼ぐようになるまでのロードマップをまとめました」
https://proengineer.internous.co.jp/content/columnfeature/19305
という記事を見つけました。
後半めちゃめちゃ良記事じゃないですかね。。

まとめると

Pythonの副業案件受注ロードマップとしては

5万~10万のスクレイピング依頼なら
初心者でもPythonの副業案件を受注可能。
初めはLP制作など簡単な案件を受注し、実績を作成。
プログラミング学習サイトで基礎を習得し、実務経験を持つことが重要。
クラウドソーシングで簡単案件を受注し、実績を増やし収入を得る。

10万円以上のスクレイピング依頼なら
経験を積み、案件の受注数を増やし技術幅を広げる。
案件の発注元の評判を事前に調べることが大切。
案件の見極めが難しい場合、フリーランスエージェントを利用する方法もある。

Pythonの副業案件と在宅・リモートでスクレイピング依頼に慣れる
機械学習・AI関連案件の数学知識
独自アルゴリズムの場合、高額案件でも大学レベルの数学が必要。
API経由の場合は数学知識が必須ではないこともあり、徐々に学んでいく方法も。

最後に副業案件を受注するコツ
開発実績をアピールするためにポートフォリオを作成。
実績がない場合、勉強内容を活かしたWebアプリケーションを制作。
コミュニケーション能力を示すことも重要であり、円滑な業務連絡が受注に繋がる。

ということですね。

他にもこんな記事を見つけました

案件内容 報酬金額
Pythonでアプリのバグ修正 1件:10~30万円
フィンテックを組み込んだサービスのデータ分析 時給:2,500~5,000円
HRデータを分析するアナリスト募集 時給:3,000~6,000円
自社AI開発のデータサイエンティスト 時給:4,000~6,000円
提供するサービスから得たデータの分析 時給:3,000~6,000円

これです。

けっこういい値段しますね。
でも弊社の感覚だと初心者だと時給2500円以上になることは難しいんじゃないかな
直感的には思いますが、スクレイピングは得意なもののあまり小規模のものをやったことがないので
こんなものなのでしょうか、
すごく割りがいいように見えます。

あ、、これ出店がhttps://crowdworks.jp/public/jobs/search?search%5Bkeywords%5D=Python&keep_search_criteria=true&order=score&hide_expired=true
ここを分析したってことなんですね。
スクレイピングの依頼案件を一つ一つ統計とて見たってことなんでしょうか。
とてもいい記事ですね。

え、maneyfowardも紹介してる
在宅のススメなんでしょうか。
これはびっくりです。

あ、なるほど。
こうやってスクレイピングの依頼をこなせるようになったら
「サラリーマンが副業で起業して会社設立するやり方と節税のメリットを解説」
このような記事を見て起業してねみようってことですね。

スクレイピングをフックにスキルをつけて起業して設立するなら
monety Fowardということですね。
私もお勧めしておきます。
(この記事は案件ではないです)

けっこう実績0からでもpython勉強してスクレイピング依頼をゲットしようって記事は
https://prog-you.com/pythcn-webscraping/
https://itpropartners.com/blog/13189/
多いですね。

わたしの感覚でも今これら記事をみて、案件が簡単で
単価が安いものなら確かにクラウドワークスやランサーズで
スクレイピングを依頼してる会社さんの案件を副業とかでやれるのかもしれないなと
思って来ちゃいましたね。

ランサーズの案件とかみてみると
https://www.lancers.jp/work/search/system/scraping
おー、はじめてみたんですが
小さい案件たくさんありますね。
すごく簡単なものが多いです。

今リアルタイムでみながら書いているんですけど こういう案件で このサイトから商品詳細のリンククリックして 詳細のh1とimageを持ってくるだけなら こんな感じでできます。
(イメージです。)


from bs4 import BeautifulSoup
import requests
import os

# 初めの詳細URL(適宜変更)
initial_detail_url = "https://fullahead-yugi.com/shopbrand/yugi-b11-09/page1/recommend/"

# 初めの詳細ページにアクセス
initial_response = requests.get(initial_detail_url)
initial_html = initial_response.content

# BeautifulSoupオブジェクトを作成
initial_soup = BeautifulSoup(initial_html, 'html.parser')

# 各詳細URLを取得
detail_urls = []
detail_links = initial_soup.find_all('a', href=True)
for link in detail_links:
    if '/shopdetail/' in link['href']:
        detail_urls.append(link['href'])

# 保存先ディレクトリの作成
save_dir = 'images'
os.makedirs(save_dir, exist_ok=True)

# 各詳細URLにアクセスしながら情報を取得
for detail_url in detail_urls:
    full_detail_url = f"https://fullahead-yugi.com{detail_url}"
    response = requests.get(full_detail_url)
    detail_html = response.content
    detail_soup = BeautifulSoup(detail_html, 'html.parser')

    # h1要素のテキストを取得
    h1_text = detail_soup.find('h1').text.strip()

    # 画像のURLを取得して保存
    image_div = detail_soup.find('div', class_='product_images')
    image_tags = image_div.find_all('img')

    for idx, img_tag in enumerate(image_tags):
        img_url = img_tag['src']
        img_response = requests.get(img_url)
        img_data = img_response.content

        # 画像のファイル名を生成
        img_extension = img_url.split('.')[-1]
        img_filename = f"{h1_text}_{idx + 1}.{img_extension}"

        # 画像を保存
        img_path = os.path.join(save_dir, img_filename)
        with open(img_path, 'wb') as img_file:
            img_file.write(img_data)

        print(f"Image saved: {img_path}")

実際に掲載されていた案件がほとんど終わってしまった。
このように15分で終わる案件を1日10件くらいやって生きるのもいいかもです。

これくらいなら確かに大学生でもできるなと思ったら
「Python初心者の大学生が副業で月20万稼いだ方法を紹介する」
という記事を見つけました。

確かに。可能かもです。

しかし、
あえていうと
こういう簡単な案件ならいいんです
中には
海外の
そっこうでパズル認証を出して来たり
IPを二度とアクセスさせなくして来たり
HTML構造を変えて来たりする難易度が高いサイトが存在します。
こういうサイトのスクレイピングは
依頼をする側も初心者に依頼したら終わるイメージです。

つまりこのような案件です

  • パズル認証の突破する必要がある系
    • 自動化ツールやOCR(光学文字認識)を使用して認識や解決を試みることがやってます場合によってはRPAも必要です。 これには一定の技術的な知識と試行錯誤が必要です。初心者では無理です。
  • そしてIP分散
    • IPアドレスを分散するためには、プロキシサーバーを使用することが一般的です。 プロキシサービスを利用することで、リクエストごとに異なるIPアドレスを使用できます。 mobileIPやレジデンスIPなどサービスは結構高額なんですよね。
  • 途中でだめになっちゃったときのスクレイピングの再開
    • スクレイピングを一時停止して再開する場合、取得済みデータを記録しておく必要があります。 データベースやファイルにスクレイプ結果を保存し、再開時にそれを読み込んで処理を続行できます。 つまりちょっとpythonで〜とかは絶対に無理ですね。
  • サイトへのログインが必要な場合
    • ユーザ名とパスワードを提供し、セッションを管理する必要があります。 一般的なアプローチは、リクエストヘッダーにセッションクッキーを追加することですが、これも奥深いので初心者では無理です。
  • あとはロボットだと思われる回遊の模倣ですね。
    • ユーザの回遊を模倣するためには、リクエスト間隔をランダムに設定したり、ランダムなページ遷移を行うことで、自動化が検知されにくくなります。 ランダムにするだけなんですけど「じゃあ何をどうやって?」というところになると初心者では無理です。
  • あとは、これは初心者でもできますがユーザーエージェントの設定です。
    • ユーザーエージェントを「Chrome」等にすることで、スクレイピングがブラウザからのアクセスと見なされる可能性が高まります。 ただし、ユーザーエージェントの偽装も簡単に検知できます。「セレニウム使ってますよね」ってすぐわかります。 これを克服するとなると初心者では無理です。

例えば Apify のようにスクレイピングおよび自動化のためのプラットフォームで、
JavaScriptや Node.js でスクリプトを作成できるものがありますが、
Apifyは、プロキシやユーザーエージェントの管理、キャッシュ、タスクの再実行などをサポートして
よく使います。これ使わないとなると無理なサイトはたくさんあります。

  • Scrapy: Pythonのスクレイピングフレームワークで、パズル認証やログイン、スクレイピングの再開、プロキシの使用などをサポートしています。
  • Selenium: ブラウザ自動化ツールで、JavaScriptが動作するページのスクレイピングやログインが可能です。ユーザーエージェントの設定やリアルブラウジングの模倣によく使われます。あまり使いませんが、使う人が多いです。
  • Proxyサービス: プロキシサービスを使用してIPアドレスを分散させることができます。例えば、LuminatiやProxyMeshなどがあります。

倫理的にどうなのかという問題はありますが、 これとあと言いたくないので言いませんがあと二つの技術でほぼ全て取ることができますが 初心者では無理。

このように高度なスクレイピングができる場合は、 ちょっと市場の指標の相関性に理解がある人なら、 日本だけでなく海外も含めた重要指標を定期的にスクレイピングし、 ある条件で売買をするというツールを作ったりもできますね。

最後に依頼したいと思ったらさまざまなサービスがありますので、選んでください。

一応弊社が一番おすすめだと思ってる知られていない会社は

ここです。 「スクレイピングの神
(弊社が利用したことがあるというだけの話です。)

弊社の問い合わせフォームから「スクレイピング依頼したい」って一言くれるだけでも良いですがスクレイピングは難しいものを対応したいと考えています。