Красивая find_all не возвращает значения случайно - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу получить некоторую информацию с веб-сайта, и поэтому я захожу на его страницу и получаю все ссылки, которые содержат определенную строку в ссылке.Затем я перебираю ссылки и хочу получить информацию со страниц ссылок.однако иногда функция 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...