π ΠΠ°ΠΊ ΠΏΠ°ΡΡΠΈΡΡ ΡΠ°ΠΉΡ ΠΠ²ΠΈΡΠΎ Π½Π° Python π? ΠΠ΅Π³ΠΊΠΈΠΉ Π³Π°ΠΉΠ΄ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΈ ΠΊΠΎΠ΄ΠΎΠΌ!
ΠΠ»Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° ΡΠ°ΠΉΡΠ° Avito Π½Π° Python Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ BeautifulSoup. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°:
import requests
from bs4 import BeautifulSoup
# ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΡΡΡΠ°Π½ΠΈΡΡ
url = "https://www.avito.ru/"
response = requests.get(url)
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
# ΠΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅
items = soup.find_all('div', class_='item')
# ΠΡΠ²ΠΎΠ΄ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ²
for item in items:
print(item.text)
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΠΏΠ°ΡΡΠΈΡΡ ΡΠ°ΠΉΡ ΠΠ²ΠΈΡΠΎ Π½Π° Python
ΠΠ°ΡΡΠΈΠ½Π³ Π²Π΅Π±-ΡΠ°ΠΉΡΠΎΠ² Π½Π° Python ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π°ΠΆΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ Π΄Π°Π½Π½ΡΡ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΏΠ°ΡΡΠΈΡΡ ΡΠ°ΠΉΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΠΠ²ΠΈΡΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Python ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
1. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π½Π°ΡΠ°ΡΡ ΠΏΠ°ΡΡΠΈΡΡ ΡΠ°ΠΉΡ ΠΠ²ΠΈΡΠΎ, ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π½Π° Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Python ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:
- requests: Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ HTTP-Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ HTML ΡΡΡΠ°Π½ΠΈΡΡ
- BeautifulSoup: Π΄Π»Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° HTML ΡΡΡΠ°Π½ΠΈΡΡ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
pip install requests beautifulsoup4
2. ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ HTML ΡΡΡΠ°Π½ΠΈΡΡ
Π‘Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ HTML ΠΊΠΎΠ΄ ΡΡΡΠ°Π½ΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠΏΠ°ΡΡΠΈΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ requests. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°:
import requests
url = 'https://www.avito.ru/'
response = requests.get(url)
html = response.text
print(html)
ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ GET Π·Π°ΠΏΡΠΎΡ Π½Π° ΡΠ°ΠΉΡ ΠΠ²ΠΈΡΠΎ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΅Π³ΠΎ HTML ΠΊΠΎΠ΄ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ html
.
3. ΠΠ°ΡΡΠΈΠ½Π³ HTML ΡΡΡΠ°Π½ΠΈΡΡ
ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ HTML ΡΡΡΠ°Π½ΠΈΡΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ°ΡΡΠΈΡΡ Π΅Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ BeautifulSoup. ΠΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π½ΡΠΆΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· HTML ΠΊΠΎΠ΄Π°.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈ Π΅Π³ΠΎ ΡΠ΅Π½Ρ:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
ad_titles = soup.find_all('h3', class_='snippet-title')
ad_prices = soup.find_all('span', class_='snippet-price')
for title, price in zip(ad_titles, ad_prices):
print(title.text, price.text)
ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ find_all()
, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Ρ ΡΠ΅Π³ΠΎΠΌ h3
ΠΈ ΠΊΠ»Π°ΡΡΠΎΠΌ snippet-title
(Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ) ΠΈ span
Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ snippet-price
(ΡΠ΅Π½Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ). ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΈΠΊΠ» for
ΠΈ ΡΡΠ½ΠΊΡΠΈΡ zip()
, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΉΡΠΈΡΡ ΠΏΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΈ ΡΠ΅Π½ ΠΈ Π²ΡΠ²Π΅ΡΡΠΈ ΠΈΡ
Π½Π° ΡΠΊΡΠ°Π½.
4. Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΠ½ΠΎΠ³Π΄Π° Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ°ΠΉΡΠ° ΠΠ²ΠΈΡΠΎ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠ΅ΠΉ ΡΠΎΠ²Π°ΡΠΎΠ² ΠΈΠ»ΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅Π½ΠΎΠ²ΠΎΠΉ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠ΅ΠΉ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΈΠ»ΡΡΡΡΠ΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΡΠ΅Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ 5000 ΡΡΠ±Π»Π΅ΠΉ:
filtered_ads = []
for title, price in zip(ad_titles, ad_prices):
price_number = int(price.text.replace(' ', '').replace('β½', ''))
if price_number < 5000:
filtered_ads.append({'title': title.text, 'price': price.text})
for ad in filtered_ads:
print(ad['title'], ad['price'])
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡ ΡΠ΅Π½Ρ Π² ΡΠΈΡΠ»ΠΎ, ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π΅Π»Ρ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ» ΡΡΠ±Π»Ρ, ΠΈ ΡΠΈΠ»ΡΡΡΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Ρ ΡΠ΅Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ 5000. ΠΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΡ
ΡΠ°Π½ΡΡΡΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ filtered_ads
, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΌΡ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈ ΡΠ΅Π½Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ.
5. ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ°ΠΉΡΠ° ΠΠ²ΠΈΡΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΠ°ΡΡΠ΅ΡΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ schedule, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠ΄ ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΌΠΈΠ½ΡΡΡ:
import schedule
import time
def update_data():
response = requests.get(url)
html = response.text
# ΠΠ°ΡΡΠΈΠ½Π³ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΡΡ
schedule.every(1).minutes.do(update_data)
while True:
schedule.run_pending()
time.sleep(1)
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ schedule.every()
, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ update_data()
ΠΊΠ°ΠΆΠ΄ΡΡ ΠΌΠΈΠ½ΡΡΡ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» while True
, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ run_pending()
Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ
Π·Π°Π΄Π°Ρ ΠΈ time.sleep()
Π΄Π»Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΎΡΠ½ΠΎΠ²Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° ΡΠ°ΠΉΡΠ° ΠΠ²ΠΈΡΠΎ Π½Π° Python. ΠΡ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ HTML ΠΊΠΎΠ΄ ΡΡΡΠ°Π½ΠΈΡΡ, ΠΏΠ°ΡΡΠΈΡΡ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ BeautifulSoup, ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
ΠΡΠΈ Π½Π°Π²ΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΡΡΠ½ΠΊΠ° ΡΠΎΠ²Π°ΡΠΎΠ², ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π΅ ΡΠ΅Π½, ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄Π°Π½Π½ΡΡ ΠΠ²ΠΈΡΠΎ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ.
Π£ΡΠΏΠ΅Ρ ΠΎΠ² Π² ΠΈΠ·ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠ°ΡΡΠΈΠ½Π³Π° Π²Π΅Π±-ΡΠ°ΠΉΡΠΎΠ² Π½Π° Python!