Невозможно удалить информацию о классе с помощью Find_All - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь извлечь информацию о классе ниже веб-сайта https://www.programmableweb.com/category/all/apis. Мой код прекрасно работает для всех страниц, кроме https://www.programmableweb.com/category/all/apis?page=2092.

from bs4 import BeautifulSoup
import requests

url = 'https://www.programmableweb.com/category/all/apis?page=2092'
response = requests.get(url)
data = response.text
soup = BeautifulSoup(data, 'html.parser')
apis = soup.find_all('tr',{'class':['odd views-row-first', 'odd','even','even views-row-last']})
print(apis)

На странице 2092 я получаю информацию только об одном классе, как показано ниже

[<tr class="odd views-row-first views-row-last"><td class="views-field views-field-pw-version-title"> <a href="/api/inkling">Inkling API</a><br/></td><td class="views-field views-field-search-api-excerpt views-field-field-api-description hidden-xs visible-md visible-sm col-md-8"> Our REST API allows you to replicate much of the functionality in our hosted marketplace solution to build custom widgets and stock tickers for your Intranet, create custom reports, add trading...</td><td class="views-field views-field-field-article-primary-category"> <a href="/category/financial">Financial</a></td><td class="views-field views-field-pw-version-links"> <a href="/api/inkling-rest-api">REST v0.0</a></td></tr>]

Для любого на другой странице (например, https://www.programmableweb.com/category/all/apis?page=2091) я получаю информацию обо всех классах. Структура HTML выглядит одинаково на всех страницах.

1 Ответ

0 голосов
/ 31 марта 2020

Этот веб-сайт постоянно добавляет новые API в свою базу данных. Таким образом, существует три сценария ios, которые могли бы вызвать это:

  1. Используемые вами селекторы неверны.
  2. На веб-сайте предусмотрена некоторая мера безопасности, позволяющая отправлять слишком много запросов.
  3. на момент обработки этой страницы действительно имелся один элемент.

сценарий № 3 Скорее всего, верить.

from bs4 import BeautifulSoup
import requests
from time import sleep

for page in range(1,2094): #starting with 1 then the last page will be 2093
  url = f'https://www.programmableweb.com/category/all/apis?page={page}'
  response = requests.get(url)
  data = response.text
  soup = BeautifulSoup(data, 'html.parser')
  apis = soup.select('table[class="views-table cols-4 table"] tbody tr') # better selector
  print(apis) #page 2093 currently has 6 items on it .
  sleep(5) #This will sleep for 5 secs 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...