Ошибка типа: индексы списка должны быть целыми числами или фрагментами, а не тегом

#python #string #selenium #web-scraping #tags

#python #строка #selenium #очистка веб-страниц #Теги

Вопрос:

У меня ошибка. когда я пытаюсь объединить ссылку и часть следующей ссылки, где мне нужно переключиться. Вот моя ошибка:

 ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-172-c75cfd599dcf> in <module>
     21         l.append(j['href'])
     22 
---> 23         url2 = 'https://krisha.kz/prodazha/kvartiry/petropavlovsk/'   ''.join(l[j])
     24         driver.get(url2)
     25 

TypeError: list indices must be integers or slices, not Tag

 

И я столкнулся с проблемой в следующем коде:

     response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')

    links = soup.find_all('a', {'class': 'a-card__title'})
    soup2 = BeautifulSoup(str(links), 'html.parser')
    href = soup2.find_all('a', href=True)
    l = []
    for j in href:
        l.append(j['href'])
        
        url2 = 'https://krisha.kz/prodazha/kvartiry/petropavlovsk/'   ''.join(l[j])
        driver.get(url2)
        
 

Мой «l» — это список hrefs, и он выглядит так, как показано на рисунке ниже:
введите описание изображения здесь

Из-за этого я не могу перейти на следующую страницу, чтобы очистить ее. Какое целое число или фрагмент мне здесь нужно?

Комментарии:

1. l[j] — j — это тег, а не целое число

2. могу ли я как-то изменить это, чтобы решить проблему?

3. ''.join(l[j]) — какова ваша цель в этой части?

4. используйте l[j] без скобок [ ] =)))

5. j — это тег. вы не можете передать его как индекс. пожалуйста, уточните, что вы хотите сделать. от чего вы ожидаете l[j] возврата?

Ответ №1:

Вместо того, чтобы использовать list попытку использования j вашего цикла:

 url2 = 'https://krisha.kz/prodazha/kvartiry/petropavlovsk/'  j['href'][1:]
 

Я вырезал его в конце, чтобы избежать a // в URL.

Вы также можете использовать list , но чем вам нужно enumerate в вашем цикле:

 for i,j in enumerate(href):
    l.append(j['href'])
    url2 = 'https://krisha.kz/prodazha/kvartiry/petropavlovsk/'  l[i][1:]
 

Пример

 from bs4 import BeautifulSoup
import requests
import pandas as pd
url = "https://krisha.kz/prodazha/kvartiry/petropavlovsk/"


response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

links = soup.find_all('a', {'class': 'a-card__title'})
soup2 = BeautifulSoup(str(links), 'html.parser')
href = soup2.find_all('a', href=True)
l = []
for j in href:
    l.append(j['href'])

    url2 = 'https://krisha.kz/prodazha/kvartiry/petropavlovsk/'  j['href'][1:]
    print(url2)