この特典が必要ですか? Python を使用して出会い系サイトの女の子のデータを収集します

序文

ことわざにあるように、私たちの職業から学ぶゲイの男性は、パートナーを見つけるのは簡単ですか?

新年ももうすぐ終わり、彼女を探す時が来ました

ここにウェブサイトを見つけました。

単一の特典のウェーブを送信する必要がない場合は、これらのデータを収集する方法も学習できます。

ここに画像の説明を挿入

環境とモジュール

環境開発

  • パイソン3.8
  • パイチャーム

モジュールの使用

import parsel       --> pip install parsel
import requests     --> pip install requests
import csv
import re

インストールモジュール

モジュールをインストールしていない友達

win + R、cmdと入力し、インストールコマンド pip install モジュール名を入力 (インストール速度が遅いと思われる場合は、国内のミラーソースを切り替えることができます)

モジュールのインストールの問題:

  • pythonサードパーティ製モジュールをインストールする場合:
    1. Win + R、cmdと入力し、[OK]をクリックし、インストール コマンド pip install module name (pip install requests) を入力してEnterを押します
    。 2. pycharmで[ターミナル]をクリックして、インストール コマンドを入力します。

  • インストール失敗の理由:

  • 失敗 1: pip は内部コマンドではありません
    解決策: 環境変数を設定します

  • 失敗 2: 赤 (読み取りタイムアウト)
    の解決策が多数あります: ネットワーク接続がタイムアウトしたため、ミラー ソースを切り替える必要があります

清華大学: https://pypi.tuna.tsinghua.edu.cn/simple Alibaba
Cloud: https://mirrors.aliyun.com/pypi/simple/
中国科学技術大学 https://pypi.mirrors. ustc.edu.cn /simple/
華中科技大学: https://pypi.hustunique.com/
山東理工大学: https://pypi.sdutlinux.org/
斗盤: https://pypi.douban. com/simple/
例: pip3 install - i https://pypi.doubanio.com/simple/ モジュール名

  • 失敗 3: cmd は、それがインストールされていることを示しているか、インストールは成功していますが、まだ
    pycharm にインポートできません.Python インタープリターがセットアップされていません

pycharm で python インタープリターを設定するには?

  1. ファイル(ファイル)を選択 >>> 設定(設定) >>> プロジェクト(プロジェクト) >>> python interpreter(python インタープリター)
  2. 歯車をクリックし、追加を選択します
  3. Python のインストール パスを追加する

pycharm はどのようにプラグインをインストールしますか?

  1. ファイルを選択(ファイル) >>> 設定(設定) >>> プラグイン(プラグイン)
  2. マーケットプレイスをクリックして、インストールするプラグインの名前を入力します. 例: 翻訳プラグインの場合は、translation と入力し、中国化プラグインの場合は Chinese と入力します
  3. 対応するプラグインを選択し、インストールをクリックします
  4. インストールが成功すると、pycharm を再起動するオプションがポップアップ表示されます。[OK] をクリックすると、再起動が有効になります。

基本的な思考プロセス

1. データ ソース分析:

  1. 明確な要件:

収集されたデータとは —> データ データ <静的 Web ページ>

ページのソースコードで

ここに画像の説明を挿入

すべてのIDを取得すれば、すべてのデータ情報を収集できます

ここに画像の説明を挿入

すべての女の子の詳細ページのURL IDがあります

2. コードの実装手順:

  • リクエストを送る
  • データを取得する
  • 分析データ
  • セーブデータ

すべての詳細ページ ID を取得します。

  1. リクエストを送信し、ブラウザをシミュレートして URL アドレスのリクエストを送信します

ここに画像の説明を挿入

  1. データを取得し、サーバーによって返された応答データを取得します。
    開発者ツール -> 応答

  2. データを解析し、必要なデータ コンテンツを抽出します
    詳細ページ ID —> UID
    詳細ページ情報を取得します

  3. リクエストを送信し、ブラウザをシミュレートしてリクエストを送信します url アドレス
    ここに画像の説明を挿入
    データ詳細ページの url アドレス


  4. データを取得し、サーバーWeb ページのソース コードから返された応答データを取得します。


  5. データを解析し、必要なデータの基本情報を抽出する

  6. データを保存、データ内容をローカルに保存、
    データ基本情報をcsv形式
    で保存、写真データを保存、ローカルフォルダに保存

ここに画像の説明を挿入


実装コード

完全なソースコードを取得するには、ここをクリックしてください

# 导入数据请求模块
import requests
# 导入数据解析模块
import parsel
# 导入csv
import csv
# 导入正则
import re
f = open('data.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['昵称',
                                           '性别',
                                           '年龄',
                                           '身高',
                                           '体重',
                                           '出生日期',
                                           '生肖',
                                           '星座',
                                           '籍贯',
                                           '所在地',
                                           '学历',
                                           '婚姻状况',
                                           '职业',
                                           '年收入',
                                           '住房',
                                           '车辆',
                                           '照片',
                                           '详情页',
                                           ])
csv_writer.writeheader()

1.リクエストを送信し、ブラウザをシミュレートしてURLアドレスのリクエストを送信します

  • アンチクロール
    を防止するために、開発者ツールにコピーして貼り付けることができるブラウザー ヘッダー要求ヘッダーをシミュレートします。
  • <Response [200]>
    レスポンス オブジェクトのステータス コード 200 は、リクエストが成功したことを示します。
for page in range(1, 11):
    # 请求链接
    url = f'https://********.com/valueApp/api/love/searchLoveUser?page={page}&perPage=12&sex=0'
    # 伪装模拟
    headers = {
    
    
        # User-Agent 用户代理, 表示浏览器基本信息
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    # 发送请求
    response = requests.get(url=url, headers=headers)
    print(response)

2. データを取得し、サーバーから返された応答データを取得します

開発者ツール —> 応答

response.json() レスポンスのjsonデータを取得、辞書データ型

3. データを解析し、必要なデータの内容を抽出する

    详情页ID ---> UID
    因为得到数据: 字典数据类型
    所以解析数据: 键值对取值 ---> 根据冒号左边的内容[键], 提取冒号右边的内容[值]
# for循环遍历, 把列表里面元素一个一个提取出来
for index in response.json()['data']['items']:
    #  https://love.19lou.com/detail/51593564  format 字符串格式化方法
    link = f'https://****.com/detail/{index["uid"]}'

4.リクエストを送信し、ブラウザをシミュレートしてURLアドレスのリクエストを送信します

        https://love.19lou.com/detail/51593564  资料详情页url地址

5. データを取得し、サーバーから返された応答データを取得します

ウェブページのソースコード

  • response.text 応答テキスト データを取得し、文字列データ型を返します
  • response.json() レスポンスのjsonデータを取得、辞書データ型
html_data = requests.get(url=link, headers=headers).text

6. データを解析し、必要なデータ コンテンツを抽出する

基本情報

css セレクター: ラベル属性の内容に従って
データを抽出します xpath: ラベル ノード
re 正規に従ってデータを抽出します

  1. データに対応するラベルを見つけるのは、
  2. コピーを選択するだけ

取得したhtml文字列データ <html_data> を解析可能なオブジェクトに変換

selector = parsel.Selector(html_data)
name = selector.css('.username::text').get()
info_list = selector.css('.info-tag::text').getall()

. 呼び出しメソッドの属性を示します

gender = info_list[0].split(':')[-1]
age = info_list[1].split(':')[-1]
height = info_list[2].split(':')[-1]
date = info_list[-1].split(':')[-1]

info_listの要素数で判断すると、要素数が4の場合、重みの列がないことを意味します

if len(info_list) == 4:
    weight = '0kg'
else:
    weight = info_list[3].split(':')[-1]
info_list_1 = selector.css('.basic-item span::text').getall()[2:]
zodiac = info_list_1[0].split(':')[-1]
constellation = info_list_1[1].split(':')[-1]
nativePlace = info_list_1[2].split(':')[-1]
location = info_list_1[3].split(':')[-1]
edu = info_list_1[4].split(':')[-1]
maritalStatus = info_list_1[5].split(':')[-1]
job = info_list_1[6].split(':')[-1]
money = info_list_1[7].split(':')[-1]
house = info_list_1[8].split(':')[-1]
car = info_list_1[9].split(':')[-1]
img_url = selector.css('.page .left-detail .abstract .avatar img::attr(src)').get()

7. 画像を保存し、画像のバイナリ データを取得します。

img_content = requests.get(url=img_url, headers=headers).content
with open('data\\' + new_name + '.jpg', mode='wb') as img:
    img.write(img_content)
print(dit)

効果

賢明な包子は、自分で視覚的なチャートを作成することもできます

ここに画像の説明を挿入

やっと

Xiaoyuanは、ゼロベースの友人がここで学ぶためのケースチュートリアルも推奨しています.興味がある場合は、ご覧ください.ソースコードが必要な場合は、下の名刺をクリックして入手することもできます〜

【パイソン事例指導】ゼロベース学習に最適な実践事例、実践練習で次のパイソンマスターに

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/yxczsz/article/details/128792917