- サイトのデータ・インタフェース、アドレスを分析し、取得の画像をダウンロード
# - * -コーディング:UTF-8 - * -
インポートのOS
インポート再
インポートsysの
インポートSSL
輸入xlwtの
インポート時の
インポート_threadの
インポート要求が
インポートpymysql
輸入スレッド#の自定义线程
クラスmyThread(threading.Thread):
デフ__init __(自己、スレッドID、名前、カウンター):
threading.Thread .__のinit __(自己)
self.threadID =スレッドID
self.name =名前
self.counter =カウンタ
デフ実行します(自己):
印刷( "开始线程:" + self.name)
threadLock.acquire()
getDataFromDB(self.counter)
threadLock.release()
印刷( "退出线程:" + self.name)
#証明書検証キャンセル
)(コンテキスト= ssl._create_unverified_contextを#请求头定义
ヘッダー= {
'接続': 'キープアライブ'、
'言語を受け入れ': 'ZH ZH-CN、; Q = 0.9'、
'承諾': 'text / htmlの、アプリケーション/ XHTML + XML、アプリケーション/ xmlの; \
Q = 0.9、画像/ WEBP、画像/ APNG、* / *; Q = 0.8' 、
'ユーザーエージェント': 'のMozilla / 5.0(Windows NTの10.0; WOW64)のAppleWebKit / 537.36 \
(KHTML、ヤモリ)クローム/ 63.0.3239.132サファリ/ 537.36' 、など
}#ファイルの格納パス
filePathに= 'F:/爬虫類/音楽/プレーヤー/ティン/'
#imgpath filePathに= + 'IMG /'#オープンデータベースコネクティビティ
DB = pymysql.connect(
ホスト= '127.0.0.1'、
= 3306ポート、
ユーザー= 'ルート'、
passwdファイル= 'Lutong'、
DB = 'テスト'、
文字セット= 'UTF8'
)#を使用カーソル操作するカーソルを取得する()メソッド
カーソル= db.cursorを()#制限の検索レコード番号は
= 250制限します#SQL查询语句
SQL = "名前を選択し、コードt_playerからステータス= '使用'限界{}オフセット"#現在の現地時間
T = time.time()
#音楽クエリーアドレスの何千
tingSearchUrl =「http://tingapi.ting.baidu.com/v1/restserver/ting?from=web&version=5.6.5.0&method=baidu。 ting.search.catalogSug&フォーマット= JSON&クエリ= {} '
データベースからデータを読み取るために#
DEF getDataFromDB(I):
株式会社フリーはSQLに参加
してみてください。
#SQL文の実行
SQL1 = sql.format(制限)+ STR(リミット* I)
を印刷(SQL1)
cursor.execute(SQL1)
#は、すべてのレコードのリストを取得
= cursor.fetchall結果():
内の行の結果を得るために
名前=行[0]
コード=行[1]
#印刷結果
GETIMG(名、コード)
を除く:
( '!異常な画像を得る')印刷#ゲットピクチャー、ウェブからの分析
DEF GETIMG(名、コード):
株式会社無料tingSearchUrlの参加
URLを= tingSearchUrl.format(名)
RSP = requests.get(URL = urlには、ヘッダ=ヘッダ)
jsonData = rsp.json()
(jsonData IF [ 'ERROR_CODE'] == 22000):
試してみる:
用imgUrl jsonData = [ 'アーティスト'] [0] [ 'artistpic']
imgUrl =用imgUrlのための[0:imgUrl.index( '@')]
印刷( "歌手"「+ +名「「画像アドレス:」+ imgUrl用)
imgNameコード+ = 『の.jpg』
downloadPicは(imgUrl、imgName)のために
除い:
#取得した画像が記録されていない歌手、データベースに挿入される
プリント(「歌手」」+名+ ' 「絵「を見つけ出す)!
試してみてください。
。SQL2 =( "ヌル(t_player_no_img値にINSERT '{}'、 '" + +コード"')")形式(名).format(コード)
cursor.execute(SQL2)
db.commit()
を除く:
DB .rollback()
他:
#歌手は、レコードがデータベースに挿入されていません取得し
た印刷(「!情報「「+名+」」を歌手を見つける」)
:試し
SQL2 =は、( " '、ヌル(t_player_no_img値に挿入します} { '' "+ +コード"「)「)形式(名).format(コード)。
cursor.execute(SQL2)
db.commit()
を除く:
db.rollback()
#単一の画像のダウンロード方法
downloadPic DEF (imgUrl、imgName):
試す:
R = requests.get(imgUrl)
:Fとしてオープン(filePathに+ imgName、 'WB')と
f.write(r.content)
requests.exceptions.ConnectionError除い:
プリント( '图片请求错误!')
戻り
f.close()
#取得した画像フォーマット
DEF getPicFormat(URL):
url.find( 'GIF')> = 0の場合:
'.GIF'リターン
のelif url.find> = 0( 'PNG。 '):
リターンは' .pngの'
elifのURL .find( 'JEPG。')> = 0:
リターン'.jepg'
他:
リターンは.jpg#ディレクトリ開発作成
:DEFのMKDIR(パス)
パス= path.strip()
パス= path.rstrip( '\\')
ISEXIST = os.path.exists(パス)
:IFないISEXIST
os.makdirs(パスを)
他:
印刷(「ディレクトリが既に存在する、作成するために繰り返される必要がありません!」)
#Mainメソッド
IF __name__ == '__main__':
#はディレクトリを作成し
ます。mkdir(filePathにします)#スレッドロック
threading.LockのThreadLock =()
#スレッドアレイ
スレッド= []
#のマルチスレッドの
範囲におけるIための(20を):
スレッドmyThread =(I、 "スレッド" + STR(I)、I)
threads.append(スレッド)
スレッド内TH用:
th.start()
THのためのスレッドで:
th.join()
#は、データベース接続のクローズ
)(db.closeを
- 分析ページタグ、通常の試合、アドレスおよび抽出画像のダウンロードに必要な画像のプロパティ
# - * -コーディング:UTF-8 - * -
インポートのOS
インポート再
インポートsysの
インポートSSL
輸入xlwtの
インポート時の
インポート_threadの
インポート要求が
インポートpymysql
輸入スレッド#の自定义线程
クラスmyThread(threading.Thread):
デフ__init __(自己、スレッドID、名前、カウンター):
threading.Thread .__のinit __(自己)
self.threadID =スレッドID
self.name =名前
self.counter =カウンタ
デフ実行します(自己):
印刷( "开始线程:" + self.name)
threadLock.acquire()
getDataFromDB(self.counter)
threadLock.release()
印刷( "退出线程:" + self.name)
#証明書検証キャンセル
)(コンテキスト= ssl._create_unverified_contextを#请求头定义
ヘッダー= {
'接続': 'キープアライブ'、
'言語を受け入れ': 'ZH ZH-CN、; Q = 0.9'、
'承諾': 'text / htmlの、アプリケーション/ XHTML + XML、アプリケーション/ xmlの; \
Q = 0.9、画像/ WEBP、画像/ APNG、* / *; Q = 0.8' 、
'ユーザーエージェント': 'のMozilla / 5.0(Windows NTの10.0; WOW64)のAppleWebKit / 537.36 \
(KHTML、ヤモリ)クローム/ 63.0.3239.132サファリ/ 537.36' 、など
}#ファイルの格納パス
filePathに= 'F:/爬虫類/音楽/プレーヤー/ xiami /'
#imgpath filePathに= + 'IMG /'#オープンデータベースコネクティビティ
DB = pymysql.connect(
ホスト= '127.0.0.1'、
= 3306ポート、
ユーザー= 'ルート'、
passwdファイル= 'Lutong'、
DB = 'テスト'、
文字セット= 'UTF8'
)#を使用カーソル操作するカーソルを取得する()メソッド
カーソル= db.cursorを()#制限の検索レコード番号は
= 250制限します#SQL查询语句
SQL = "名前を選択し、コードt_playerからステータス= '使用'限界{}オフセット"#ローカル現在の時間
Tは、time.time()=
#エビアドレスクエリを
xiamiSearchUrl = 'https://emumo.xiami.com/ajax/search-index?_={}&key='
データベースからデータを読み取るために#
DEF getDataFromDB(I):
株式会社フリーはSQLに参加
してみてください。
#SQL文の実行
SQL1 = sql.format(制限)+ STR(リミット* I)
を印刷(SQL1)
cursor.execute(SQL1)
#は、すべてのレコードのリストを取得
= cursor.fetchall結果():
内の行の結果を得るために
名前=行[0]
コード=行[1]
#印刷結果
GETIMG(名、コード)
を除く:
( '!異常な画像を得る')印刷#ゲットピクチャー、ウェブからの分析
DEF GETIMG(名、コード):
株式会社無料xiamiSearchUrlの参加
URLを=名前+ xiamiSearchUrl
RSP = requests.get(URL = urlには、ヘッダ=ヘッダ)
HTML = rsp.text
P-r'src = =「( //pic.xiami.net/images/artistlogo/+[^"]+\.jpg)@1e_1c_100Q_55w_55h " '
imgUrlList re.findall =(re.compile(P)、HTML)
lenのIF(imgUrlList)<= 0:
プリント(「歌手「」+名+「」画像が見つかりません!」)#
レコードは歌手のイメージを取得していない、データベースに挿入され
てみてください。
SQL2は=(「『{}』、ヌル(t_player_no_img値への挿入を、「」 。+ +コード"「)")形式(名).format(コード)
cursor.execute(SQL2)
db.commit()
を除きます:
db.rollback()
他:
#は、ダウンロード画像を取得し、
imgUrl =のための'HTTPS:' + imgUrlList [0]
印刷( 'シンガー"' +名+ '"画像アドレス:' + imgUrl用)
imgNameコード+ = 'の.jpg "
downloadPic(imgUrl用、imgName)
#単一の画像のダウンロード方法
()imgUrl、imgNameためDEF downloadPic:
トライ:
R&LT requests.get =(imgUrl用)
Fオープン(filePathに+ imgName、 'WB')を有する:
f.write(r.content)
を除きますrequests.exceptions.ConnectionError:
印刷( '絵のリクエストエラー!')
戻り
f.close()
#取得した画像フォーマット
DEF getPicFormat(URL):
url.find( 'GIF')> = 0の場合:
'.GIF'リターン
のelif url.find> = 0( 'PNG。 '):
リターンは' .pngの'
elifのURL .find( 'JEPG。')> = 0:
リターン'.jepg'
他:
リターンは.jpg#ディレクトリ開発作成
:DEFのMKDIR(パス)
パス= path.strip()
パス= path.rstrip( '\\')
ISEXIST = os.path.exists(パス)
:IFないISEXIST
os.makdirs(パスを)
他:
印刷(「ディレクトリが既に存在する、作成するために繰り返される必要がありません!」)
#Mainメソッド
IF __name__ == '__main__':
#ディレクトリを作成
MKDIRを(filePathに)
スタンプ#エビ問い合わせアドレス
xiamiSearchUrl = xiamiSearchUrl.format(INT(T) )#スレッドロック
threading.LockのThreadLock =()
#スレッドアレイ
スレッド= []
#のマルチスレッドの
範囲におけるIための(20を):
スレッドmyThread =(I、 "スレッド" + STR(I)、I)
threads.append(スレッド)
スレッド内TH用:
th.start()
THのためのスレッドで:
th.join()
#は、データベース接続のクローズ
)(db.closeを