Как получить информацию / данные с заблокированных веб-сайтов с BeautifulSoup? - PullRequest
0 голосов
/ 05 января 2019

Я хочу написать скрипт на python 3.7. Но сначала я должен это отменить. У меня нет проблем с подключением и получением данных с не заблокированных сайтов, но если сайт заблокирован, он не будет работать.

Если я использую службу VPN, я могу зайти на эти «запрещенные» сайты с помощью браузера Chrome.

Я попытался установить прокси в pycharm, но мне не удалось. Я просто постоянно получаю ошибки. Какой самый простой и бесплатный способ решить эту проблему?

from urllib.request import Request, urlopen
from bs4 import BeautifulSoup as soup

req = Request('https://www.SOMEBANNEDSITE.com/', headers={'User-Agent': 'Mozilla/5.0'})  # that web site is blocked in my country

webpage = urlopen(req).read() # code stops running at this line because it can't connect to the site. 

page_soup = soup(webpage, "html.parser") 

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Существует несколько способов удалить заблокированные сайты. Надежный способ - использовать прокси-сервис, как уже упоминалось.

Прокси-сервер, также известный как «прокси», - это компьютер, который выполняет роль шлюза между вашим компьютером и Интернетом. Когда вы используете прокси, ваши запросы пересылаются через прокси. Ваш ip напрямую не отображается на сайте, который вы удаляете.

Вы не можете просто взять любой ip (скажем, xxx.xx.xx.xxx) и порт (скажем, yy) сделать

import requests

proxies = { 'http': "http://xxx.xx.xx.xxx:yy", 
            'https': "https://xxx.xx.xx.xxx:yy"}

r = requests.get('http://www.somebannedsite.com', proxies=proxies)

и ожидайте получить ответ.

Прокси-сервер должен быть настроен на прием вашего запроса и отправку вам ответа.

итак, где взять прокси?

а. Вы можете купить прокси у многих провайдеров.

б. Используйте список бесплатных прокси из интернета.

Вам не нужно покупать прокси-серверы, если вы не выполняете масштабную утилизацию. Сейчас я сосредоточусь на бесплатных прокси, доступных в интернете. Просто выполните поиск в Google по запросу «бесплатный поставщик прокси», и вы найдете список сайтов, предлагающих бесплатные прокси. Идите к любому из них и получите любой ip и соответствующий port.

import requests

#replace the ip and port below with the ip and port you got from any of the free sites

proxies = { 'http': "http://182.52.51.155:39236", 
            'https': "https://182.52.51.155:39236"}

r = requests.get('http://www.somebannedsite.com', proxies=proxies)
print(r.text)

Вам следует по возможности использовать прокси-сервер с уровнем анонимности «Elite» (уровень анонимности будет указываться на большинстве сайтов, предоставляющих бесплатный прокси-сервер). Если вам интересно, вы также можете выполнить поиск в Google, чтобы найти разницу между «элитными», «анонимными» и «прозрачными» прокси.

Примечание:

Большинство этих бесплатных прокси не настолько надежны. Так что если вы получаете ошибку с одним сочетанием IP и порта. попробуйте другой.

0 голосов
/ 05 января 2019

Лучшим решением будет использование прокси через библиотеку requests. Это было бы лучшим решением для вас, так как он имеет возможность гибко обрабатывать запросы через прокси.

Вот небольшой пример:

import requests
from bs4 import BeautifulSoup as soup
# use your usable proxies here
# replace host with you proxy IP and port with port number
proxies = { 'http': "http://host:port", 
            'https': "https://host:port"} 

text = requests.get('http://www.somebannedsite.com', proxies=proxies, headers={'User-Agent': 'Mozilla/5.0'}).text
page_soup = soup(text, "html.parser") # use whatever parser you prefer, maybe lxml?

Если вы хотите использовать SOCKS5, вам нужно получить зависимости через pip install requests[socks], а затем заменить часть прокси на:

# user is your authentication username
# pass is your auth password
# host and port are similar as above
proxies = { 'http': 'socks5://user:pass@host:port', 
            'https': 'socks5://user:pass@host:port' }

Если у вас нет прокси, вы можете получить несколько прокси .

...