序文
ことわざにあるように、私たちの職業から学ぶゲイの男性は、パートナーを見つけるのは簡単ですか?
新年ももうすぐ終わり、彼女を探す時が来ました
ここにウェブサイトを見つけました。
単一の特典のウェーブを送信する必要がない場合は、これらのデータを収集する方法も学習できます。
環境とモジュール
環境開発
- パイソン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 インタープリターを設定するには?
- ファイル(ファイル)を選択 >>> 設定(設定) >>> プロジェクト(プロジェクト) >>> python interpreter(python インタープリター)
- 歯車をクリックし、追加を選択します
- Python のインストール パスを追加する
pycharm はどのようにプラグインをインストールしますか?
- ファイルを選択(ファイル) >>> 設定(設定) >>> プラグイン(プラグイン)
- マーケットプレイスをクリックして、インストールするプラグインの名前を入力します. 例: 翻訳プラグインの場合は、translation と入力し、中国化プラグインの場合は Chinese と入力します
- 対応するプラグインを選択し、インストールをクリックします
- インストールが成功すると、pycharm を再起動するオプションがポップアップ表示されます。[OK] をクリックすると、再起動が有効になります。
基本的な思考プロセス
1. データ ソース分析:
- 明確な要件:
収集されたデータとは —> データ データ <静的 Web ページ>
ページのソースコードで
すべてのIDを取得すれば、すべてのデータ情報を収集できます
すべての女の子の詳細ページのURL IDがあります
2. コードの実装手順:
- リクエストを送る
- データを取得する
- 分析データ
- セーブデータ
すべての詳細ページ ID を取得します。
- リクエストを送信し、ブラウザをシミュレートして URL アドレスのリクエストを送信します
-
データを取得し、サーバーによって返された応答データを取得します。
開発者ツール -> 応答 -
データを解析し、必要なデータ コンテンツを抽出します
詳細ページ ID —> UID
詳細ページ情報を取得します -
リクエストを送信し、ブラウザをシミュレートしてリクエストを送信します url アドレス
データ詳細ページの url アドレス -
データを取得し、サーバーWeb ページのソース コードから返された応答データを取得します。 -
データを解析し、必要なデータの基本情報を抽出する -
データを保存、データ内容をローカルに保存、
データ基本情報を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 正規に従ってデータを抽出します
- データに対応するラベルを見つけるのは、
- コピーを選択するだけ
取得した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は、ゼロベースの友人がここで学ぶためのケースチュートリアルも推奨しています.興味がある場合は、ご覧ください.ソースコードが必要な場合は、下の名刺をクリックして入手することもできます〜
【パイソン事例指導】ゼロベース学習に最適な実践事例、実践練習で次のパイソンマスターに