Извлечение img url с сайта с помощью python - PullRequest
1 голос
/ 07 ноября 2019

Этот код получает изображения с веб-сайта, но для некоторых я получаю list index out of range, у которого нет данных img. Как это преодолеть. Использовал много исключений try, Есть ли какой-нибудь способ, кроме try-кроме

url =

https://www.redbook.com.au/cars/details/2016-isuzu-d-max-ls-u-high-ride-auto-4x2-my155/SPOT-ITM-445820/

Для которого нет изображения, я получаю эту ошибку

list index out of range

как для этого URL

https://www.redbook.com.au/cars/details/2019-audi-s3-auto-quattro-my19/SPOT-ITM-522293/

Как пропустить эту ситуацию

код:

# -*- coding: utf-8 -*-
import lxml.html as lh
import pandas as pd
import html
from lxml import html
from bs4 import BeautifulSoup
import requests
import requests
from bs4 import BeautifulSoup as bs
import requests
from bs4 import BeautifulSoup as bs
import re
import json

cars = []  # gobal array for storing each car_data object



with open('url.txt') as f:

    # read file without newlines

    urls = f.read().splitlines()



for url in urls:

    car_data = {}  # use it as a local variable
    headers = {'User-Agent': 'Mozilla/5.0'}
    page = requests.get(url, headers=headers)
    tree = html.fromstring(page.content)
    soup = bs(page.content, 'html.parser')



    img_url = tree.xpath('//ul/li/a/img/@src')[0]
    img_url = str(img_url)
    img_url = img_url + '0'
    car_data['image_url'] = img_url
    script = soup.find('script', text=re.compile('CsnInsights.metaData'))
    jsonData = \
    json.loads(script.text.split('CsnInsights.metaData = ')[-1].rsplit(';', 1)[0])



1 Ответ

2 голосов
/ 07 ноября 2019

Вы можете применять EAFP принцип и обрабатывать IndexError, который является встроенным исключением, выдаваемым в этом случае:

try:
    img_url = str(tree.xpath('//ul/li/a/img/@src')[0]) + '0'
except IndexError:
    img_url = ''

Обратите внимание, что я использую пустую строку в качестве значения URL изображения, когда она недоступна (не удалось извлечь из HTML), но в зависимости от вашей ситуации вы можете выбрать другое значение - например, None, или использовать continue для полногопропустить обработку этого элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...