Индекс списка вне диапазона с веб-очисткой - PullRequest
0 голосов
/ 16 апреля 2020

мой код имеет индекс списка ошибок вне диапазона.

import requests
from bs4 import BeautifulSoup
import re
import pyperclip
# import pandas as pd
import csv



# Get a name of the agency

def getAgency(pageURL):

    res = requests.get(pageURL)
    res.raise_for_status()

    soup = BeautifulSoup(res.text, 'html.parser')
    elems = soup.select('h3.company-name > a')

    names = []
    for i in range(len(elems)):
        names.append(str(elems[i].text.strip()))
    return names


def getWebsite(pageURL):

    res = requests.get(pageURL)
    res.raise_for_status()

    soup = BeautifulSoup(res.text, 'html.parser')
    elems = soup.select('li.website-link.website-link-a > a')

    sites = []
    for elem in elems:
        if elem.find('/your-project') != -1:
            elems.remove(elem)

        else:
            pass

    for i in range(len(elems)):
        sites.append(str(elems[i]["href"]))
    return sites

allNames = []
for pagenumber in range(0,1):
    names = getAgency('https://clutch.co/agencies/digital?page=' + str(pagenumber))
    allNames += names

allSites = []
for pagenumber in range(0,1):
    sites = getWebsite('https://clutch.co/agencies/digital?page=' + str(pagenumber))
    allSites += sites

final = []
with open('text.csv', 'w', newline='') as f:
    a = csv.writer(f, delimiter=',')
    for index in range(len(allNames)):
        final.append(",".join([allNames[index].replace(",", " "), allSites[index]]))
        a.writerows(final)

finalresult = "\n".join(final) 
pyperclip.copy(finalresult)

Я знаю, что вызывает эту ошибку, это утверждение if.

for elem in elems:
        if elem.find('/your-project') != -1:
            elems.remove(elem)

        else:
            pass

Когда я удаляю элемент из списка, номер индекса уменьшается на 1. И так, в этом для l oop индексом будет длина allNames, и я использовал тот же индекс с allSites. Таким образом, когда индекс будет последним элементом allNames, allSites выдаст ошибку, потому что он будет вне диапазона. Что я могу сделать, чтобы решить эту проблему?

for index in range(len(allNames)):
            final.append(",".join([allNames[index].replace(",", " "), allSites[index]]))
            a.writerows(final)

1 Ответ

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

Вам нужно проанализировать код за одну итерацию и выплеснуть пары имен и сайтов, а затем отфильтровать их, чтобы исключить пары.

Поскольку ваш код в данный момент не совпадает, списки прежде чем пытаться отфильтровать их по '/ your-project', потому что есть рекламные ссылки, которые соответствуют 'li.website-link.wibise-link-a> a'

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