Насколько сложно зарабатывать деньги, парся веб-сайты с помощью Python?
Table Of Content
Ну, есть несколько способов заработать деньги, парся веб-сайты с помощью Python, включая анализ фондового рынка, анализ SEO, сравнение цен, агрегация контента, генерация лидов, анализ данных и выводы, а также продажа вашего кода.
Может показаться, что это просто, но продвижение вашего бизнеса и решение технических проблем может быть сложным. Сегодня я хочу подчеркнуть одну из технических проблем.
Несколько дней назад я хотел попробовать спарсить информацию о вакансиях с Indeed. Я наткнулся на этот пример кода на Python в интернете.
import requests
from bs4 import BeautifulSoup
URL = "https://www.indeed.com/jobs?q=data+scientist+%2420%2C000&l=New+York&start=10"
page = requests.get(URL)
soup = BeautifulSoup(page.text, "html.parser")
results = soup.find("div", attrs={"id": "searchCountPages"})
print(results.text.strip())
jobs = []
for div in soup.find_all("div", class_="jobsearch-SerpJobCard"):
title = div.find("h2", class_="title")
company = div.find("span", class_="company")
location = div.find("div", class_="recJobLoc")
if None in (title, company, location):
continue
job = {"title": title.text.strip(),
"company": company.text.strip(),
"location": location["data-rc-loc"]}
jobs.append(job)
print(jobs)
Этот код является скриптом парсинга веб-страницы с использованием библиотек requests и BeautifulSoup на Python. Он получает веб-страницу с indeed.com, извлекает список вакансий и сохраняет их в списке с названием jobs.
Однако, когда я запустил этот код, я столкнулся с следующим сообщением об ошибке.
Затем я переписал код следующим образом.
import requests
from bs4 import BeautifulSoup
URL = "https://www.indeed.com/jobs?q=data+scientist+%2420%2C000&l=New+York&start=10"
headers = {"User-Agent": "Mozilla/5.0"}
try:
response = requests.get(URL, headers=headers)
if response.status_code == 200:
soup = BeautifulSoup(response.text, "html.parser")
results = soup.find("div", attrs={"id": "searchCountPages"})
print(results.text.strip())
jobs = []
for div in soup.find_all("div", class_="jobsearch-SerpJobCard"):
title = div.find("h2", class_="title")
company = div.find("span", class_="company")
location = div.find("div", class_="recJobLoc")
if None in (title, company, location):
continue
job = {
"title": title.text.strip(),
"company": company.text.strip(),
"location": location["data-rc-loc"]
}
jobs.append(job)
print(jobs)
else:
print("Запрос завершился с кодом состояния:", response.status_code)
except requests.RequestException as e:
print("Произошла ошибка при получении страницы:", e)
except Exception as e:
print("Произошла ошибка при парсинге:", e)
Выглядело хорошо, больше нет синтаксических ошибок. Но я получил "Запрос завершился с кодом состояния: 403".
Какая досада!
Затем я поискал в Google и узнал, что код состояния 403 указывает на то, что сервер понял запрос, но отказывается его выполнять из-за недостаточных разрешений или проблем с аутентификацией. Сервер, скорее всего, блокирует запрос из скрипта, так как он определяет его как бота или попытку автоматического парсинга.
И есть несколько способов решить эту проблему, включая использование фейковых юзер-агентов, оптимизацию заголовков запроса или использование прокси.
Я попытался использовать фейковые юзер-агенты и оптимизировать заголовки запроса, но ни один из этих подходов не сработал. Я узнал, что сервер пометил мой IP-адрес как используемый скрапером.
Затем я попробовал несколько бесплатных сторонних библиотек и сервисов, предоставляющих функциональность ротации прокси в Python. Ни один из них не работал, потому что у бесплатных прокси есть следующие проблемы:
В заключение, вам может потребоваться инвестировать в услуги, предлагающие функциональность ротации прокси. Тогда возникает вопрос: как достичь окупаемости платной услуги?
Спасибо за чтение! Если у вас есть вопросы, пожалуйста, не стесняйтесь следовать и писать мне.