Добавить строку в подсписок в новый список - PullRequest
1 голос
/ 18 октября 2019

Я перебираю веб-страницы и пытаюсь добавить первую ссылку из списка ссылок (используя понимание списка), и у меня возникли проблемы. Я просмотрел много постов, которые приближают меня, но не совсем. Я либо получаю сообщение об ошибке (показано ниже), либо все ссылки (не только первые с каждого URL). Я попытался решения, показанные здесь , но получить другую ошибку вокруг строки навигации. Пожалуйста, смотрите ниже предыдущий мой код, ошибку и мой идеальный вывод. Спасибо за любую помощь!

Код

dfkf['URL'][0:5].values = 
      ['https://www.sec.gov/Archives/edgar/data/867028/0001493152-19-010877-index.htm',
       'https://www.sec.gov/Archives/edgar/data/1438901/0001161697-19-000350-index.htm',
       'https://www.sec.gov/Archives/edgar/data/1750/0001047469-19-004266-index.htm',
       'https://www.sec.gov/Archives/edgar/data/1138723/0001564590-19-032909-index.htm',
       'https://www.sec.gov/Archives/edgar/data/1650101/0001493152-19-009992-index.htm']


x = []
for URL in dfkf['URL'][0:5].values:
    r = requests.get(str(URL))
    soup = BeautifulSoup(r.text, 'html.parser')
    x.append([line['href'] for line in list(soup.find_all(text = re.compile('xml'), href=True))][0])

Ошибка Ошибка индекса: индекс списка вне диапазона

Идеальный вывод (первая ссылка из списка возвращенных ссылок)

  x= ['/Archives/edgar/data/867028/000149315219010877/etfm-20181231.xml',
  [],
  '/Archives/edgar/data/1750/000104746919004266/air-20190531.xml',
  '/Archives/edgar/data/1138723/000156459019032909/aray-20190630.xml',
  '/Archives/edgar/data/1650101/000149315219009992/atxg-20190331.xml']

1 Ответ

1 голос
/ 18 октября 2019

Не было необходимости в понимании списка:

for URL in dfkf['URL'][0:5].values:
    r = requests.get(str(URL))
    soup = BeautifulSoup(r.text, 'html.parser')
    links = soup.find_all(text=re.compile('xml'), href=True)
    if links:
        x.append(links[0]['href'])
    else:
        x.append(list())

Редактировать: Возможно, лучше сделать x.append(None), чем x.append(list()), если вам действительно не нужен пустой список в ваших результатах.

...