이 코드는 2 개의 필수 인수와 1 개의 필수 인수를 요구해야하며 'format'및 'type'인수는 선택적이며 'url'은 웹 사이트의 주소가 될 필수 인수입니다. 이미지를 다운로드하고 ('jpg'및/또는 .png 형식 이미지, 'type'인수에서 제공하는 값에 의존) 이미지를 개별 이미지 또는 단일 JSON 파일로 저장하려고합니다 ('format' 인수) 내가 잘못 가고 어디, 내가 오류를 얻고 것은 당신이파이썬에서 argparse 인수에 입력을 전달하는 방법
import argparse
import base64
import json
import os
from bs4 import BeautifulSoup
import requests
def scrape(url,format_,type_):
try:
page = requests.get(url)
except requests.RequestException as rex:
print(str(rex))
else:
soup = BeautifulSoup(url,'html.parser')
images = _fetch_images(soup,url)
images = _filter_images(images,type_)
_save(images,format_)
def _fetch_images(soup,base_url):
images = []
for img in soup.find_all('img'):
src = img.get('src')
img_url = ('{base_url}/{src}'.format(base_url,src))
name = img_url.split('\\')[-1]
images.append(dict(name=name,url=img_url))
return images
def _filter_images(images,type_):
if type == 'all':
return images
ext_map = {'png':['.png'],'jpg':['.jpg','.jpeg']}
return [img for img in images if
_match_extension(img['name'],ext_map(type_))]
def _match_extension(filename,extension_list):
name,extension = os.path.splittext(filename.lower())
return extension in extension_list
def _save(images,format_):
if images:
if format_=='img':
_save_images(images)
else:
_save_json(images)
print('Done!')
else:
print('there are no images!')
def _save_images(images):
for img in images:
img_data = requests.get(img['url']).content
with open(img['name'],'wb') as f:
f.write(img_data)
def _save_json(images):
data = {}
for img in images:
img_data = requests.get(img['url']).content
b64_img_data = base64.b64encode(img_data)
str_img_data = b64_img_data.decode('utf-8')
data[img['name']]=str_img_data
with open('images.json','w') as ijson:
ijson.write(json.dump(data))
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description='Scrape a webpage.')
parser.add_argument(
'-t',
'--type',
choices=['all', 'png', 'jpg'],
default='all',
help='The image type we want to scrape.')
parser.add_argument(
'-f',
'--format',
choices=['img', 'json'],
default='img',
help='The format images are saved to.')
parser.add_argument(
'url',
help='The URL we want to scrape for images.')
args = parser.parse_args()
args.url = str(input('enter the url\n'))
args.format = str(input('enter img or json \n'))
args.type = str(input('enter all or png or jpg'))
scrape(args.url,args.format,args.type)
내가 PyCharm에서 실행하고자하는 오류 난이 있어요 .. 여기 내 코드는, 말할 수
PyCharm 메뉴'Run'에서 명령 줄 인수 (필드 중 하나)를 추가 할 수 있습니다. 나는 argparse에 관해 모른다. 그러나 나는 그 논증을 찾고 있다고 생각한다. 거기에 인수로 URL을 추가하고 다시 시도하십시오 :). 이 https://i.stack.imgur.com/6KQF2.gif – voiDnyx