我想遍历网址列表并从每个页面提取图像。但是,在某些情况下,图片不存在,并且网址与我通常观察到的网址格式不同。
例如,当我遇到这样的网址时,例如使用我拥有的代码- 我收到错误消息
这是我编写的代码:
file = pd.read_csv(path)
for index,row in file.iterrows():
site = row['link']
response = requests.get(site)
soup = BeautifulSoup(response.text, 'html.parser')
pics = soup.find('img')
pic_url = pics['src']
urllib.request.urlretrieve(pic_url,'C:\\Users\\User\\test\\pictures\\'+ str(site.split('/')[-1])+'.jpg')
这是我的数据样本
name link
one https://boxrec.com/en/proboxer/844760
two https://boxrec.com/en/proboxer/838706
three https://boxrec.com/en/proboxer/879108
four https://boxrec.com/en/proboxer/745266
这是我的错误消息
ValueError:未知的URL类型:'/build/images/main/avatar.jpeg'
更新: 我尝试添加尝试,除了捕获错误并继续。但是我随后开始收到错误消息
TypeError:“ NoneType”对象不可下标
然后我将代码更新为此
try:
pic_url = pics['src']
except:
image = 'https://chapters.theiia.org/central-mississippi/About/ChapterOfficers/_w/person-placeholder_jpg.jpg'
urllib.request.urlretrieve(image,'C:\\Users\\User\\test\\pictures\\'+str(site.split('/')[-1])+'.jpg')
try:
urllib.request.urlretrieve(pic_url,'C:\\Users\\User\\test\\pictures\\'+ str(site.split('/')[-1])+'.jpg')
except:
image = 'https://chapters.theiia.org/central-mississippi/About/ChapterOfficers/_w/person-placeholder_jpg.jpg'
urllib.request.urlretrieve(image,'C:\\Users\\User\\test\\pictures\\'+str(site.split('/')[-1])+'.jpg')
但是这会返回多次重复,在某些情况下,id实际存在的图片将返回空白图片
答案 0 :(得分:0)
如果您只是想避免该错误并继续使用其他有效的图像,则可以将其包含在try: except: continue
类似这样的东西
try:
urllib.request.urlretrieve(...)
except ValueError:
continue
答案 1 :(得分:0)
只需简单地将其放入带有for循环的try / except块中,以便在遇到每个异常时都可以继续到列表中的下一个事物
file = pd.read_csv(path)
for index,row in file.iterrows():
site = row['link']
try:
response = requests.get(site)
soup = BeautifulSoup(response.text, 'html.parser')
pics = soup.find('img')
pic_url = pics['src']
urllib.request.urlretrieve(pic_url,'C:\\Users\\User\\test\\pictures\\'+ str(site.split('/')[-1])+'.jpg')
except Exception:
continue
答案 2 :(得分:0)
因为'/build/images/main/avatar.jpeg'是相对路径,它是可以被过滤掉的默认化身,如果不想过滤掉,可以将其转换为完整路径。以下代码包括自动转换功能。 以下代码使用简化的库
from simplified_scrapy.simplified_doc import SimplifiedDoc
file = pd.read_csv(path)
for index,row in file.iterrows():
site = row['link']
response = requests.get(site)
doc = SimplifiedDoc(response.text)
pics = doc.listImg(url=site)[0]
pic_url = pics.url
urllib.request.urlretrieve(pic_url,'C:\\Users\\User\\test\\pictures\\'+ str(site.split('/')[-1])+'.jpg')