爬虫類のマルチスレッドを利用してかわいい女の子のピクチャーをダウンロードします
爬虫類のマルチスレッドを利用してかわいい女の子のピクチャーをダウンロードします
前の文章の中で、私はまだマルチスレッドのダウンロード方法を学んでいないので、画像を登るスピードが遅くて、効果はあまり理想的ではありません(时にはとても急いで画像がほしいです)、だからネット上で関連資料を検索した後、初歩的に前の文章のコードに対して最適化を行って、マルチスレッドの方式を採用して、しかも関数の数を減らして、mkdir関数をmakedirs関数に変えて、更に便利で、パケットフォルダに存在するか否かを判断する文を追加し、ダウンロードを上書きすることを防止し、コードロジックをより明らかにする~~(可能)~~
あまり話さないで、直接コードを引っ張ってください.
注意事項==(必見)==
プログラムを実行するために必要なライブラリはコードの上にありますので、ご自身でインストールしてください.ここでは方法を説明しません.私のローカルで実行している間、問題は見つかりませんでした.ダウンロード速度も速いです.上記コードにおいてpathはダウンロードパケットの格納アドレスであるtime.sleepのパラメータは遅延秒数であり,あまり小さな数値に変更しないことを推奨し,IPがカプセル化されないようにする.main関数のパラメータは図戦のページ数で、全部で800ページあります.ページ数が大きいほど、パケットの撮影時間が長くなるので、あまり大きな数値に変更しないことをお勧めします.main関数のforループはあまり大きな数値に変更しないでください.IP(親測)を閉じられます.以前の品質の低い図が好きでない限り.
このコードを使用するときにパラメータを変更して、エラーを防ぐようにしてください.
また問題が発生した場合は下の方で交流し、意見があれば提出を歓迎します.筆者のコードの経験も不足しているので、きっと昇進できるところがたくさんあるに違いありません.皆さん、教えてください.后で私はその他の文章を更新することができて、兴味のあるみんなは少し称賛して関心を持つことができて、これも笔者の动力で、ありがとうございます!前回のコードのリンクはhttps://blog.csdn.net/qq_39305249/article/details/102628783
前の文章の中で、私はまだマルチスレッドのダウンロード方法を学んでいないので、画像を登るスピードが遅くて、効果はあまり理想的ではありません(时にはとても急いで画像がほしいです)、だからネット上で関連資料を検索した後、初歩的に前の文章のコードに対して最適化を行って、マルチスレッドの方式を採用して、しかも関数の数を減らして、mkdir関数をmakedirs関数に変えて、更に便利で、パケットフォルダに存在するか否かを判断する文を追加し、ダウンロードを上書きすることを防止し、コードロジックをより明らかにする~~(可能)~~
あまり話さないで、直接コードを引っ張ってください.
from bs4 import BeautifulSoup
import requests
import time
import os
import threading
def get_html(url):
try:
response=requests.get(url)
response.encoding='gb2312'
if response.status_code==200:
print(' ! '+url)
return response.text
except requests.RequestException:
return None
def get_url_and_name(url):
" , 2 , 1 , 2 "
html=get_html(url)
soup=BeautifulSoup(html,'lxml')
name=[]
url_1=[]
list2=soup.find_all(class_='t')
sign=1
for item in list2:
if(sign!=1 and sign!=42):
url_temp=item.find('a').get('href')
name_temp=item.find(class_='title').find('a').get('title')
url_1.append(url_temp)
name.append(name_temp)
sign=sign+1
temp=[url_1,name]
return temp
def pic_down(url,name,path):
"url ,name ,path "
address=[]
file_folder_name=path+'./'+name
html1=get_html(url)
soup=BeautifulSoup(html1,'lxml')
list4=soup.find(class_='page').find_all('a')
temp=1
while(temp<len(list4)):
if(temp==1):
url_3=url
else:
url_3=url.replace('.html','_'+str(temp)+'.html')
temp=temp+1
html2=get_html(url_3)
soup1=BeautifulSoup(html2,'lxml')
list3=soup1.find(class_='content').find_all('img')
for item in list3:
address.append(item.get('src'))
if(os.path.exists(file_folder_name)==True):
return 0
os.makedirs(file_folder_name)
print(' '+name)
index=1
for i1 in address:
filename = path+'./'+name+'./'+str(index) +'.jpg'
with open(filename, 'wb') as f:
img = requests.get(i1).content
f.write(img)
index += 1
time.sleep(2)
print(name+' !')
def main(i):
url='https://www.keke234.com/gaoqing/list_5_'+str(i)+'.html'
path=r'M:\2'
information=get_url_and_name(url)
num=0
for item in information[0]:
threading.Thread(target=pic_down,args=(item,information[1][num],path)).start()
num=num+1
time.sleep(2)
if __name__ == '__main__':
for i in range(2,5):
main(i)
注意事項==(必見)==
プログラムを実行するために必要なライブラリはコードの上にありますので、ご自身でインストールしてください.ここでは方法を説明しません.私のローカルで実行している間、問題は見つかりませんでした.ダウンロード速度も速いです.上記コードにおいてpathはダウンロードパケットの格納アドレスであるtime.sleepのパラメータは遅延秒数であり,あまり小さな数値に変更しないことを推奨し,IPがカプセル化されないようにする.main関数のパラメータは図戦のページ数で、全部で800ページあります.ページ数が大きいほど、パケットの撮影時間が長くなるので、あまり大きな数値に変更しないことをお勧めします.main関数のforループはあまり大きな数値に変更しないでください.IP(親測)を閉じられます.以前の品質の低い図が好きでない限り.
このコードを使用するときにパラメータを変更して、エラーを防ぐようにしてください.
また問題が発生した場合は下の方で交流し、意見があれば提出を歓迎します.筆者のコードの経験も不足しているので、きっと昇進できるところがたくさんあるに違いありません.皆さん、教えてください.后で私はその他の文章を更新することができて、兴味のあるみんなは少し称賛して関心を持つことができて、これも笔者の动力で、ありがとうございます!前回のコードのリンクはhttps://blog.csdn.net/qq_39305249/article/details/102628783