Сервер не отправляет страницу, либо отправляет почти пустую, без основных данных. Python
Хотел сделать парсер интернет магазинов, который парсит цены и регулярно их обновляет. Какие-то магазины отправляют мне страницу, где самой важной информации просто нету, а от некоторых данные вообще не приходят. Некоторые сайты мне даже удаётся парсить, но стоит запустить бесконечный цикл с парсером, как уже через секунду вылетает ошибка.
Ответы (1 шт):
Да, такое действительно может быть. Вот основные причины, и как их решать:
1. Сайт не доступен в вашей стране: Сервер банально запрещает сайт всем пользователям из этой страны. Он может либо вообще не давать никаких данных, либо отправить страницу с сообщением о заблокированной стране. В таком случае вы можете воспользоваться VPN.
2. Неправильный user-agent: Если вы отправляете запрос стандартной библиотекой Python requests, и кроме URL-адреса в параметрах больше ничего не указываете, то скорее всего страница будет другой, нежели чем той, что вы видите в браузере.
import requests
url = 'http://site.do/index.html'
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
} # устанавливаем user-agent
r = requests.get(url, headers=headers)
Если вы его не укажете, то при запросе так и будет написано: "Запрос отправляет программа python-requests". Вы также можете воспользоваться библиотекой fake_useragent (документация). Однако если вы захотите использовать эту библиотеку, то следует увеличить тайм-аут между запросами (частые запросы с разными user-agent-ами могут принять как DoS-атаку.)
3. Увеличить тайм-аут. Об этом уже сказано в предыдущем пункте.
4. Страница не подгружается скриптами. Сейчас проясню одно важное различие:
# Не уходим от предыдущего кода
pageText = r.text # Исходный текст страницы, не подгружаемый скриптами
# скриптами из <script></script>. PHP код исполняется, т. к. это серверный язык программирования
pageContent = r.content # Контент страницы, подгруженный скриптами