Beautifulsoup застрял на странице - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь почистить некоторый контент со страниц, но Beautifulsoup застрял на некоторых страницах, где нет исходного кода, например, это one .

import requests
from bs4 import BeautifulSoup

def make_soup(url):
    try:
        html = requests.get(url).content
    except:
        return None
    return BeautifulSoup(html, "lxml")

url = "https://cdn.podigee.com/uploads/u735/1d4d4b22-528e-4447-823e-b3ca5e25bccb.mp3?v=1578558565&source=webplayer"
soup = make_soup(url)

print(soup.select_one("a.next").get('href'))

Это работает довольно хорошо. Что происходит, если файл, подобный .mp4 или .m4a, попадает в сканер вместо страницы HTML, тогда скрипт зависает: (

Ответы [ 2 ]

0 голосов
/ 28 января 2020
def is_downloadable(url):
    """
    Does the url contain a downloadable resource
    """
    h = requests.head(url, allow_redirects=True)
    header = h.headers
    content_type = header.get('content-type')
    if 'text' in content_type.lower():
        return False
    if 'html' in content_type.lower():
        return False
    return True
url = "https://cdn.podigee.com/uploads/u735/1d4d4b22-528e-4447-823e-b3ca5e25bccb.mp3?v=1578558565&source=webplayer"

print(is_downloadable(url))
0 голосов
/ 28 января 2020

Я предполагаю, что у вас есть список URL, которые вы хотите проанализировать. В этом случае вы можете l oop через них, а когда make_soup() возвращает None, вы можете перейти к следующей итерации с ключевым словом continue.

def make_soup(url):
    try:
        html = requests.get(url).content
    except:
        return None
    return BeautifulSoup(html, "lxml")

urls = [
    "https://cdn.podigee.com/uploads/u735/1d4d4b22-528e-4447-823e-b3ca5e25bccb.mp3?v=1578558565&source=webplayer",
]

for url in urls:
    soup = make_soup(url)
    if soup is None:
        continue

    print(soup.select_one("a.next").get('href'))

Для случаев, когда URL-адрес занимает слишком много времени, вы можете указать функцию тайм-аута . Если вы на Windows, вы можете посмотреть здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...