изменить:
i = 0
for i in range(0, 5000):
url = link[i]
на просто:
for url in link:
И тогда можно избавиться от url = link[i]
Вы по сути говорите это циклудо 5000 элементов в вашем списке, когда у вас нет 5000 элементов, следовательно, list index out of range
.Вы действительно хотите, чтобы он проходил по каждому элементу, пока не закончатся элементы.И вы можете сделать это, просто сказав for url in link:
Затем то же самое для вашего другого вложенного цикла for.
измените:
j = 0
for j in range (0, linko):
curl = linkia[j]
на:
for curl in linkia:
Также отмечу, что если бы вы настроили его так, как вам нужно, вам не нужно было бы устанавливать начальные значения i или j равными = 0. Так как вы устанавливаете диапазон / список для перехода от0, 5000 ... цикл for будет автоматически начинаться с этого первого элемента 0. Но опять же, эта точка не имеет значения, так как я бы не рекомендовал повторять этот список таким образом.Это а) не является надежным (вам потребуется ровно 5000 элементов в вашем списке каждый раз, когда он попадает в этот цикл), и б) в то время как он будет работать нормально для вашего второго цикла, потому что вы устанавливаете диапазон от 0 до длинысписок, это действительно не нужно, так как вы можете сжать это в 1 строку.
Попробуйте:
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import re
import csv
my_url = "http://www.example.com"
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
links = page_soup.select('dt > a[href]')
link = [tag.get('href') for tag in links]
for url in link:
Client = uReq(url)
pageHtml = Client.read()
Client.close()
pSoup = soup(pageHtml, "html.parser")
linkeas = pSoup.findAll(href=re.compile(my_url))
def linkas(href):
return href and re.compile("html").search(href) and re.compile(my_url).search(href)
linka = pSoup.findAll(href=linkas)
if linka != []:
linkia = [tag.get('href') for tag in linka]
for curl in linkia:
cClient = uReq(curl)
pageHtml = cClient.read()
cClient.close()
Soup = soup(page_html, "html.parser")
country = Soup.select('.class > a:nth-of-type(3)')
countri = country[0].text.strip()
print(countri)