Я хочу получить некоторую информацию с веб-сайта, и поэтому я захожу на его страницу и получаю все ссылки, которые содержат определенную строку в ссылке.Затем я перебираю ссылки и хочу получить информацию со страниц ссылок.однако иногда функция BeautifullSoup не возвращает значений.
import requests
from bs4 import BeautifulSoup
url = 'https://www.website.com/'
r = requests.get(url)
soup = BeautifulSoup(r.text,'html.parser')
results = soup.find_all('a')
#creating the list for all links found
links = []
for result in results:
if "speciallink" in result['href']:
href = 'https://www.website.com'+result['href']
links.append(href)
links = list(set(links))
for link in links:
url = link
r = requests.get(url)
soup = BeautifulSoup(r.text,'html.parser')
txt = 'text1'
results = soup.find_all("div",{'class':txt})
try:
date = results[0].string
except IndexError:
print("error")
Но когда я снова использую цикл только с URL-адресом, в котором, очевидно, нет значения, он большую часть времени возвращает значения, но иногда нет:
for link in links:
url = 'https://www.website.com/page_with_error/'
r = requests.get(url)
soup = BeautifulSoup(r.text,'html.parser')
txt = 'text1'
results = soup.find_all("div",{'class':txt})
try:
date = results[0].string
except IndexError:
print("error")
Это статичный сайт, хотя.Может быть, это из-за того, что сайт еще не загружен?
[временно решение]
Я сделал небольшое исправление, которое помогает решить эту проблему, но я думаю, что это не очень хорошорешение.Я просто использую цикл while для получения необходимой информации:
import requests
from bs4 import BeautifulSoup
url = 'https://www.website.com/'
r = requests.get(url)
soup = BeautifulSoup(r.text,'html.parser')
results = soup.find_all('a')
#creating the list for all links found
links = []
for link in links:
url = 'https://www.website.com/page_with_error/'
r = requests.get(url)
soup = BeautifulSoup(r.text,'html.parser')
txt = 'text1'
results = soup.find_all("div",{'class':txt})
error =0
#new- i added this
while(len(results) == 0 ):
error = error +1
r = requests.get(url)
soup = BeautifulSoup(r.text,'html.parser')
txt = 'text1'
results = soup.find_all("div",{'class':txt})
if(error>10000):
print("got to break that")
break
# new-over
try:
date = results[0].string
except IndexError:
print("error")