Python BeautifulSoup find_all в течение для l oop csv - PullRequest
0 голосов
/ 14 апреля 2020

У меня проблемы с проектом, над которым я работаю.

У меня есть CSV-файл, в котором все URL-адреса указаны в первом столбце.

Мой скрипт, приведенный ниже, в настоящее время загружается и выполняет итерацию по каждой строке, но затем, как только он пытается найти find_all, он выдает следующую ошибку: IndexError: список индексов выходит за пределы диапазона.

import requests
from bs4 import BeautifulSoup
import csv

with open('1.csv', "r", newline="") as inFile, open("1output.csv", "w", newline="") as outFile:
    next(inFile)
    reader = csv.reader(inFile)
    writer = csv.writer(outFile)
    for row in reader:
        subURL = row[0]

        # Parse the HTML from the website
        URL = 'https://www.example.com/{}'.format(subURL)
        page = requests.get(URL)
        soup = BeautifulSoup(page.content, 'html.parser')

        # find iframe on webpage and get the src of the iframe
        iframeDesc = soup.find_all('iframe')[0]
        pageDesc = requests.get(iframeDesc['src'])
        soupDesc = BeautifulSoup(pageDesc.content, 'html.parser')

        # Get Description from iframe Desc
        itemDesc = soupDesc.find_all('div', id="div_01")

В этой строке возникает ошибка:

iframeDesc = soup.find_all('iframe')[0]

1 Ответ

1 голос
/ 14 апреля 2020

Могут быть различные мотивы для вашей проблемы, позвольте мне представить вам наиболее вероятные.

  1. Неправильный шаблон : в этом случае исключение является нормальным, так как вы спрашиваете BeautifulSoup чтобы вернуть вам то, что не встречается в документе
  2. Опечатка : самая простая, может быть, неправильная буква не позволяет вам получить нужный узел?

Более того, я подозреваю, что вы ищете не тот узел в дереве. На самом деле, это часто случается при использовании BS, потому что вы в основном заходите в DOM и, скорее всего, пропустите тег. Просто поместите несколько отпечатков вокруг вашего кода, чтобы увидеть, что происходит в этих строках.

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