Проблемы при очистке на питоне с помощью BeautifulSoup

avatar
Bill My
8 августа 2021 в 19:04
104
1
0

Я начал парсить на питоне, обычно в большинстве случаев работает почти 99% материала. Но я сталкиваюсь с проблемами, которых, по моему мнению, быть не должно (потому что, когда я пытаюсь выполнить ту же очистку, используя другие языки, мне это удалось).

Я постараюсь опубликовать несколько примеров конкретных сайтов для каждой проблемы.

Одна проблема заключается в том, что некоторые сайты я могу очистить с помощью http, но это не удается для https, а для других это не удается для https и не для http. Также несколько раз я получал один код ответа для http и 200 для https или наоборот. Как я могу изменить его, чтобы я всегда мог очищать «http»? как мне удалось сделать это на других языках.

пример:

res=requests.get('http://{}'.format("asmc.com"), headers=headers, allow_redirects = True)
number= str(res.status_code)
soup = BeautifulSoup(res.text, 'html.parser')
title=soup.title.string
title

приведенный выше код для этого сайта asmc.com работает, только если я использую https, а не если я использую http. Почему? Как мне это решить?


Вторая проблема заключается в том, что некоторые сайты я не мог парсить ни с помощью http, ни с https, хотя на других языках я мог. поскольку это действительные сайты со всеми тегами html

пример:

res=requests.get('http://{}'.format("alljobs.co.il"), headers=headers, allow_redirects = True)
number= str(res.status_code)
soup = BeautifulSoup(res.text, 'html.parser')
title=soup.title.string
title

этот сайт alljobs.co.il я не могу найти его тег, используя http или https. Почему? Как это исправить?


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

заголовки = { 'Accept-Encoding': 'gzip, deflate, sdch', «Принять язык»: «en-US, en; q = 0,8», «Небезопасные запросы на обновление»: «1», «User-Agent»: «Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/56.0.2924.87 Safari/537.36», 'Принять': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8', 'Кэш-Контроль': 'max-age=0', «Соединение»: «поддерживать активность», }

Источник
MattDMo
8 августа 2021 в 19:07
1

Некоторые сайты поддерживают только https и не имеют настройки переадресации с http...

MattDMo
8 августа 2021 в 19:15
0

И на alljobs.co.il есть куча Javascript, который загружает сайт, поэтому вам нужно будет использовать модуль с поддержкой JS, например selenium.

Bill My
8 августа 2021 в 19:20
0

спасибо. Но @MattDMo здесь не может быть правдой. Это происходит здесь и на многих других сайтах только здесь на python. Когда я очищаю сайты на разных языках, все работает нормально. Также вы можете проверить, что на первом сайте есть переадресация с http и он направлен на https, вы можете проверить его инструменты. Наконец, я хочу подчеркнуть, что я получаю суп и код, но не могу получить заголовок, хотя я мог бы получить заголовок, например, с помощью javascript. даже когда я использовал http, а не https

MattDMo
8 августа 2021 в 19:27
0

requests не анализирует/не выполняет Javascript, как, вероятно, делают другие ваши механизмы парсинга, особенно, если одним из ваших языков является JS. Попробуйте вместо этого использовать selenium или phantomjs.

Bill My
8 августа 2021 в 19:30
0

@MattDMo да, я использовал JS, и это сработало. Как мне использовать селен для этого, у вас есть код? я новичок в питоне

MattDMo
8 августа 2021 в 19:33
0

selenium.dev/documentation и выберите параметры Python.

MattDMo
8 августа 2021 в 19:37
0

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

Bill My
9 августа 2021 в 01:38
0

пробовал выдает ошибки не работает

Ответы (1)

avatar
Adam Smooch
8 августа 2021 в 19:18
0

сайт asmc.com работает, только если я использую https, а не если я использую http. Почему? Как мне это решить?

Похоже, единственный вариант — использовать HTTPS, поскольку владельцы не поддерживают http. ОБНОВЛЕНИЕ: поскольку это works in another language, применяется ниже.

этот сайт alljobs.co.il я не могу найти его тег, используя http или https. Почему? Как это исправить?

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

Я бы попробовал использовать http на этих других языках и python, затем добавил wireshark для захвата входящего трафика и сравнения содержимого пакетов.

Вероятно, библиотеки каждого языка могут добавлять разные заголовки/и т.д. которые влияют на реакцию веб-сайта.

ОБНОВЛЕНИЕ: разбираем эту идею дальше...

  1. Интернет работает на пакетах.
  2. Библиотеки преобразуют ваш запрос в пакеты и
  3. разные библиотеки могут делать это немного по-разному.
  4. В некоторых крайних случаях веб-сайты будут работать некорректно с определенными комбинациями заголовков/и т. д.
  5. Wireshark может предоставить вам see содержимое этих (`http-only) пакетов, чтобы вы могли сравнить/сопоставить детали того, как каждый язык создает пакеты, которые они отправляет. https://en.wikipedia.org/wiki/Wireshark
  6. Используйте то, что вы узнали (какие заголовки и т. д. не нравятся веб-сайту), и выясните, как заставить вашу библиотеку генерировать пакеты запросов just right...
Bill My
8 августа 2021 в 19:25
0

Что касается вашей первой части, я не понимаю, потому что она отлично работает на других языках, даже с использованием http. Что касается вашей второй части, «попробуйте использовать http на этих других языках и python, затем добавьте wireshark для захвата трафика и сравнения содержимого пакетов». Я не понимаю, не могли бы вы показать код, может быть? спасибо

Adam Smooch
8 августа 2021 в 19:27
0

Это не решение для кода — используйте инструмент wireshark для захвата трафика и просмотра того, какие заголовки и т. д. библиотеки каждого языка отправляют

Bill My
8 августа 2021 в 19:29
0

я не знаком с этим. И не могу понять, о чем вы говорите, извините.

Adam Smooch
8 августа 2021 в 19:36
0

...или просто используйте другой язык, если он там работает 🤷‍♂️