Уведомления

Группа в Telegram: @pythonsu

#1 Май 22, 2017 15:14:46

Nick_15033
Зарегистрирован: 2017-05-05
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсер Avito

Ребят , помогите пожалуйста , очень нужно доделать код по Парсеру Avito . Не могли бы вы помочь мне с кодом.
Мне надо , чтобы парсер работал.
1) Чтобы при нажатии на кнопку Парсить вызывалась функция pars и парселся сайт. ( А сейчас он начинает парситься с начала)
2) Чтобы при нажатии на кнопку Save код сохранялся в csv файле.
ПОМОГИТЕ , ПОЖАЛУЙСТА
Вот код:

 ## -*- coding: utf-8 -*-
# одключение библиотек 
from tkinter import *
import requests
from bs4 import BeautifulSoup
import csv
#Графическая оболочка 
root = Tk()
root.title('Парсер для Avito')
root.geometry ('1500x830')
width = root.winfo_screenwidth()
height = root.winfo_screenheight()
lab1 = Label(root,font='10', text = "Ввидеты ссылку на товары:")
tx1 =Entry(root,width= 45,font='10')
cb1 = Checkbutton(root, text= "Заголовок товара",font='8',onvalue = '1', offvalue = '0')
cb2 = Checkbutton(root, text= "Цена товара",font='8',onvalue = '1', offvalue = '0')
cb3 = Checkbutton(root, text= "Метро",font='8',onvalue = '1', offvalue = '0')
cb4 = Checkbutton(root, text= "Ссылка на продукт",font='8',onvalue = '1', offvalue = '0')
cb5 = Checkbutton(root, text= "Дата размещения на сайте",font='8',onvalue = '1', offvalue = '0')
cb6 = Checkbutton(root, text= "Описание товара ",font='8',onvalue = '1', offvalue = '0')
cb9 = Checkbutton(root, text= "Имя продавца",font='8',onvalue = '1', offvalue = '0')
lab2 = Label(root, width= 30,height = 3,font='10', text = "Выберите метод сохранения файла:")
cb10 = Checkbutton(root, text= "Сохранить",font='8')
cb12 = Checkbutton(root, text= "Не сохранять",font='8')
tx2 = Text(root,width = 100 , height = 50)
scr = Scrollbar(root,command=tx2.yview)
tx2.configure(yscrollcommand=scr.set,)
scr2 = Scrollbar(root,command=tx2.yview,orient= 'horizontal')
tx2.configure(xscrollcommand=scr2.set)
but = Button(root ,text = 'SAVE', font = 100)
but2= Button(root, text='Парсеть' , font = 200)
#вывод на экран
lab1.place(x = 1, y = 1)
tx1.place ( x = 220 ,y = 1)
cb1.place ( x = 1 , y = 30)
cb2.place( x = 1,y =60)
cb3.place( x = 1,y =90)
cb4.place( x = 1,y =120)
cb5.place( x = 200,y =30)
cb6.place( x = 200,y =60)
cb9.place(x = 1, y = 150)
lab2.place( x = 1, y = 220)
cb10.place(x = 1, y = 265)
cb12.place(x = 180 , y = 265)
tx2.place (x = 680, y = 1)
scr.place (x = 662,y = 1)
scr2.place( x = 680, y = 807)
but2.place (x= 1 ,y = 180)
but.place ( x = 1, y = 300)
#основной парсер
def get_html(url):# получение url кода
    r = requests.get(url)
    return r.text
def get_total_pages(html):#считывание кол-ва страниц
    soup = BeautifulSoup(html, 'lxml')
    pages = soup.find('div',class_='pagination-pages').find_all('a',class_='pagination-page')[-1].get('href')
    total_pages = pages.split('=')[1].split('&')[0]
    return int(total_pages)
    ads = soup.find('div',class_='catalog-list').find_all('div',class_='item_table')
    for ad in ads:
        if cb1 == '1': 
            title = ad.find('div',class_='description').find('h3').text.strip()#Заголовок 
        else:
            pass
        if cb4 == '1':
            url = 'https://www.avito.ru' + ad.find('div',class_='discription').find('h3').find('a').get('href')#Ссылка
        else:
            pass
        if cb2 == '1':
            price = ad.find('div',class_='about').text.strip()#цена
        else:
            pass
        if cb3 =='1':
            metro = ad.find('div',class_='data').find_all('p')[-1].text.strip()#метро
        else:
            pass
        if cb5 == '1':
            data_tovara = ad.find('div', class_='data').find('div',class_='clearfix').find('div',class_='data c-2').text.strip()#дата размещения товара 
        else:
            pass
        if cb6 == '1':
            opisanie = ad.find('div',class_='item-view-block').find('p').text.strip()#описание товара 
        else:
            pass
        if cb9 =='1':
            saller = ad.find('div',class_='seller-info-name').find('a').text.strip()#продавец
        else:
            pass
        
        global data
        data = {'title':title,
                'price':price,
                'metro':metro,
                'url':url,
                'data_tovara':data_tovara,
                'opisanie':opisanie,
                'saller':saller}
        
def write_csv(data):
    with open('avito.csv','w') as f:
        writer = csv.writer(f)
        writer.writerow(( data['title'],data['price'],data['metro'],data['data_tovara'],data['opisanie'],data['saller'],data['url'] ))
                                     
def print_(event):
    soup = BeautifulSoup(html,'lxml')
    write_csv(data)
    
        
def get_page_data(html):
    soup = BeautifulSoup(html,'lxml')
but.bind('<Button-1>',pars)
but2.bind('<Button-1>',print_)
def main():
    #https://www.avito.ru/novosibirsk?p=1&q=iphone+5s
    url = 'https://www.avito.ru/novosibirsk?p=1&q=iphone+5s'
    base_url = 'https://www.avito.ru/novosibirsk?'
    lab = Label(root, text="", font="Arial 12",height=3)
    page_part = 'p='
    query_part = '&q=iphone+5s'
    total_pages = get_total_pages(get_html(url))
    for i in range(1, total_pages):
        url_gen = base_url + page_part + str(i) + query_part
        html = get_html(url_gen)
        
if __name__ == '__main__':
    main()
root.mainloop()
Огромное спасибо тем , кто поможет

Отредактировано Nick_15033 (Май 22, 2017 15:37:56)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version