正規表現-単純なクローラーの例-4K美容記事
記事のディレクトリ
セクション1:ステートメント
あなた自身の研究ノート、クロールコンテンツはビジネスに使用されません
セクション2:ダウンロードリンク分析
まず、クロールしたい4Kビューティーの詳細ページを探す必要があります。
こちらの写真が欲しいです。
次に、さらに分析するために、このページのソースコードを確認する必要があります。(右クリックして確認するか、ショートカットキーCtrl + Shift + Iを使用するかを選択できます)
最初の画像を例として取り上げます(コードは次のとおりです):
ソースファイルタグsrcが表示され、コンテンツを取得しますそれを比較して ' http:/ /pic.netbian.com 'は部分的にリンクに統合されていますが、事前にWebページで試してみると、この結果が表示されます。
(これはウェブサイトのホームページへのリンクであるため、なぜhttp://pic.netbian.comと統合されているのですか、ハハハ)
これはサムネイルであり、私たちが望む高解像度の全体像ではありません。
詳細を見てみましょう。ソースファイルラベルの上にもハイパーリンクラベルがあります。それをクリックしてこのページに移動します。
次に、このページをもう一度確認します。
別のソースファイルが見つかりました。それを「http://pic.netbian.com」と組み合わせてみましょう。
ああ、私たちが望む高解像度の全体像です!
次のステップは、アイデアを明確にしてクロールを開始することです。
セクション3:コードの記述
1.インポートセクション
import requests
import re
import os
2.リクエストを作成します
headers = {
'user - agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.116Safari / 537.36'
}
url='http://pic.netbian.com/4kmeinv/'
response_1=requests.get(url=url,headers=headers)
html_1=response_1.text
Requestsライブラリの調査のために、少し前に整理しました(当時、書き方がわからなかったので、少し面倒です)
Webクローラー----- Requestsライブラリの概要
3.正規表現の構築
詳細ページから高解像度画像まで別のページに移動する必要があるため、最初に作成した正規表現は別のページに移動することです。
必要なのはハイパーリンクタグhrefの背後にあるコンテンツなので、正規表現は次のように記述できます。
<a.*?href.+?(/tupian.+?html)
正規表現は一般的な記号です。正規表現を参照してください-一般的に使用されるマッチングルール
4.データ処理
構築後、これらのデータを取り出す必要があります
image_urls=re.findall('<a.*?href.+?(/tupian.+?html)',html_1,re.S)
印刷して結果
を見ると、リストであることがわかります。re.findallで得られた結果が結果です。ここで注意が必要です。したがって、この結果を使用できるように、この結果をトラバースする必要があります。
for image_url in image_urls:
picture_urls = 'http://pic.netbian.com' + image_url
抽出された結果は完全なリンクではないので、トラバースしたときに追加しました。次に、それを印刷して結果を確認します。
一連のリンクがあります。最初のリンクをクリックします。これはたまたまチェックしたリンクで、成功したことを示しています。
次に、上記の手順を繰り返して、このページを分析し、データを抽出します
for image_url in image_urls:
picture_urls = 'http://pic.netbian.com' + image_url
# print(picture_urls)
response_2 = requests.get(url=picture_urls, headers=headers)
html_2 = response_2.text
pictures = re.findall('<div.*?photo-pic.*?<img src="(/uploads.+?jpg).*?alt.+?"(.*?)"', html_2, re.S)
ここでの正規表現は、再構築すると、抽出されたコンテンツがソースファイルであり、altの背後にあるコンテンツです。
for picture in pictures:
picture_url = picture[0]
picture_src = 'http://pic.netbian.com' + picture_url#高清图的源文件链接
picture_name = picture[1] + '.jpg'#构建准备保存的图片的名称
picture_name = picture_name.encode('iso-8859-1').decode('gbk')#这里是防止图片名称出现乱码的情况
5.データを保存します
まず、フォルダを作成する必要があります
if not os.path.exists('D:/4K美女'):
os.mkdir('D:/4K美女')
次に、取得したデータの最終処理を行います
picture_data = requests.get(url=picture_src, headers=headers).content#写入文件的内容——也就是想要的高清大图啦
picture_path = 'D:/4K美女/' + picture_name#构建图片存储路径
最後に、ファイルを書き込み、保存して閉じます
with open(picture_path, 'wb') as f:
f.write(picture_data)
print(picture_path, '下载完成')
6.完全なコード
import requests
import re
import os
#创建文件夹
if not os.path.exists('D:/4K美女'):
os.mkdir('D:/4K美女')
headers = {
'user - agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.116Safari / 537.36'
}
url='http://pic.netbian.com/4kmeinv/'
response_1=requests.get(url=url,headers=headers)
html_1=response_1.text
image_urls=re.findall('<a.*?href.+?(/tupian.+?html)',html_1,re.S)
# print(image_urls)
for image_url in image_urls:
picture_urls = 'http://pic.netbian.com' + image_url
# print(picture_urls)
response_2 = requests.get(url=picture_urls, headers=headers)
html_2 = response_2.text
pictures = re.findall('<div.*?photo-pic.*?<img src="(/uploads.+?jpg).*?alt.+?"(.*?)"', html_2, re.S)
for picture in pictures:
picture_url = picture[0]
picture_src = 'http://pic.netbian.com' + picture_url#高清图的源文件链接
picture_name = picture[1] + '.jpg'#构建准备保存的图片的名称
picture_name = picture_name.encode('iso-8859-1').decode('gbk')#这里是防止图片名称出现乱码的情况
picture_data = requests.get(url=picture_src, headers=headers).content#写入文件的内容——也就是想要的高清大图啦
picture_path = 'D:/4K美女/' + picture_name#构建图片存储路径
# 保存图片
with open(picture_path, 'wb') as f:
f.write(picture_data)
print(picture_path, '下载完成')
セクション4:補足(複数ページのクロール)
複数のページをクロールする場合は、最初のURLに対してforループ処理を実行するだけで済みます。
for i in range(2,5):
url='http://pic.netbian.com/4kmeinv/index_{}.html'.format(i)
response_1=requests.get(url=url,headers=headers)
html_1=response_1.text
じゃ、行こう!!!!!
クローラーの例を完成させるのはこれが初めてです。私は良い友達を書いたと思います。親指を立ててサポートしていただけませんか。
私はいくつかの場所であまり標準化された用語を使用しないかもしれないことを知っています、そして私は何人かの大物が私にいくつかの提案をしてくれることを願っています。