Первая ссылка найдена, но не могу найти вторую? (Python, bs4) - PullRequest
0 голосов
/ 22 апреля 2020

Итак, у меня есть куча ссылок, которые я хочу скачать с помощью wget и bs4, и прежде чем использовать wget для загрузки, мне нужно почистить ссылку для скачивания с веб-сайта. Но у меня возникла проблема, когда он находит первую фактическую ссылку для скачивания, а не вторую.

Код:

from bs4 import BeautifulSoup
import requests
import os

links = open('links.txt', 'r') 
count = 0

while True:
    count += 1
    line = links.readline()
    if not line: 
        break
    print("Line{}: {}".format(count, line.strip()))
    source = requests.get(line)
    soup = BeautifulSoup(source.text,'lxml')
    Download = soup.find(id="download-url", href=True)
    print(Download.get('href'))

И вывод:

Line1: (Download Link Here)
(Download URL Here)
Line2: (Download Link Here)
Traceback (most recent call last):
  File "D:\Downloads\Downloader\Downloads\download.py", line 19, in <module>
    print(Download.get('href'))
AttributeError: 'NoneType' object has no attribute 'get'

1 Ответ

1 голос
/ 22 апреля 2020

Если BeautifulSoup не находит ни одного элемента с идентификатором download-url, вероятное объяснение состоит в том, что в источнике, который был выбран, такого элемента нет.

Возможные причины:

  • В URL-адресе, который вы выбираете, есть опечатка, и вы анализируете страницу 404
  • Для страницы требуется авторизация, которую вы забыли, поскольку вошли в нее через браузер
  • Страница, на которую вы переходите, использует UA нюхает и возвращает requests содержимое, отличное от обычного браузера
  • Страница, на которую вы переходите, ограничивает скорость, и вы нажимаете ее слишком много раз с помощью ваш сценарий

В любом случае ответ тот же: напишите свой код, чтобы он подтвердил наличие элемента, от которого он зависит, и предоставил вам информацию об устранении неполадок в случае сбоя. Он может напечатать, например, источник страницы, и / или код ответа, и / или содержимое какого-либо другого элемента, который, как вам известно, находится на странице.

Очистка - это грязный бизнес. Специальный корпус и подготовка к неожиданной поломке является частью работы.

...