Ошибка: у вас нет разрешения на доступ к URL-адресу на этом сервере. в Красивый суп - PullRequest
0 голосов
/ 17 июня 2020

from bs4 import BeautifulSoup
import requests

site = 'https://www.france24.com/en/'

# Get HTML Content
r = requests.get(site)
soup = BeautifulSoup(r.content, 'html.parser')

print(soup)

# Find the Headline HTML
media_list = soup.find_all('div', class_='t-content__section-pb')

print(media_list)

Я пытаюсь получить HTML от France24 для агрегатора контента, над которым я работаю. Этот код работает для большинства сайтов, которые я пробовал, но по некоторым причинам для некоторых сайтов он возвращает

You don't have permission to access "http://www.france24.com/en/" on this server.<p>
Reference #18.87e82d17.1592371984.e5f81db

Ответы [ 3 ]

1 голос
/ 17 июня 2020

вы можете попробовать передать информацию заголовка в запросе

site = 'https://www.france24.com/en/'
header = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',
}
# Get HTML Content
r = requests.get(site, headers=header)
0 голосов
/ 17 июня 2020

Попробуйте игнорировать сертификаты SSL,

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup as bs
import ssl

# --- ignore ssl certificate ---
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

url = 'https://www.france24.com/en/'
html = urllib.request.urlopen(url, context=ctx).read() 

soup = bs(html, 'html.parser') 
media_list = soup.find_all('div', class_='t-content__section-pb')

print(media_list)

Примечание : Кстати, это не вернуло никаких данных для запрошенного класса. Итак, я использовал soup.find(attrs={'class':'t-content__section-pb'})

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup as bs
import ssl

# --- ignore ssl certificate ---
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

url = 'https://www.france24.com/en/'
html = urllib.request.urlopen(url, context=ctx).read()

soup = bs(html, 'html.parser')
media_list = soup.find(attrs={"t-content__section-pb"})

print(media_list)

Пример вывода:

<section class="t-content__section-pb">
<div class="o-banana-split">
<div class="o-layout-list o-banana-split__main-articles">
<div class="o-layout-list__item o-layout-list__item--main-item">
<div class="m-item-list-article m-item-list-article--main-article">
<a href="/en/20200617-beijing-closes-schools-again-as-covid-19-cases-mount">
<div class="article__figure-wrapper">
<figure class="m-figure m-figure--16x9">
...

Надеюсь, это сработает для вас ... удачной утилизации :)

0 голосов
/ 17 июня 2020

Эта ошибка указывает на то, что веб-сайт мог заблокировать ваш доступ или он был заблокирован вашим интернет-провайдером или rnet провайдером, и вам необходимо связаться с ними.

...