Делала парсер для Avito по одному видеоуроку, там автор передает параметры страницы способом GET, т.е. все что находится за знаком “?”. Но я решила использовать другой сайт, там все параметры находятся внутри url, т.е. get параметров нет.
Вот как выглядит строка:
flashhome.ru/genre_arcade_2_20_bydate.html
2 – это страница (постраничной навигации)
20 – это количество записей на странице.
Как переписать код чтобы можно было выводить записи но при этом используя классы и сессии? Вот код:
print('Content-Type: text/html; charset=utf-8\n')
import requests
from bs4 import BeautifulSoup
#from collections import namedtuple
#InnerBlock = namedtuple('Block','title,price,currency,date,url')
class AvitoParser:
def __init__(self):
self.session = requests.Session()
#Чтобы Avito не думал что мы его ломаем, а думал что мы просто браузер
self.session.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
'Accept-Language': 'ru',
}
def get_page(self, page: int = None):
# params = {
# 'radius': 0,
# 'user': 1,
# }
# if page and page > 1:
# params['p'] = page
#cd=1&localPriority=0&
#url = 'https://www.avito.ru/moskva/avtomobili/bmw-ASgBAgICAUTgtg3klyg'
url = 'http://flashhome.ru/genre_arcade_'+ page +'_20_bydate.html'
r = self.session.get(url, params=params)
return r.text
def get_blocks(self):
text = self.get_page(page=2)
print(text)
return
# soup = bs4.BeautifulSoup(text,'lxml')
# Запрос CSS-селектора, состоящего из множества классов, производится через select
# container = soup.select('div.item.item_table.clearfix.js-catalog-item-enum.item-with-contact.js-item-extended')
# for item in container:
# block = self.parse_block(item=item)
# print(block)
def main():
p = AvitoParser()
p.get_blocks()
if __name__ == '__main__':
main()