Уведомления

Группа в Telegram: @pythonsu

#1 Май 18, 2017 17:58:05

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

Нужна помощь по парсеру Avito

Ребят, возникла ошибка по парсеру. пишет invali syntax. Помогите пожалуйста с кодом.

 ## -*- coding: utf-8 -*-
# подключение библиотек 
import requests
from bs4 import BeautifulSoup
import csv
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)
def write_csv(data):
    with open('avito.csv','a') as f:
        writer= csv.writer(f)
        writer.writerow( ( data['title'],
                           data['price'],
                           data['metro'],
                           data['data_tovara'],
                           data['opisanie'],
                           data['saller'],
                           data['url'] ))
        
def get_page_data(html):
    soup = BeautifulSoup(html,'lxml')
    ads = soup.find('div',class_='catalog-list').find_all('div',class_'item_table')
    for ad in ads:
        
        try:
            title = ad.find('div',class_='discription').find('h3').text.strip()
        except:
            title =''
        try:
            url = 'https://www.avito.ru' + ad.find('div',class_='discription').find('h3').find('a').get('href')
        except:
            url = ''
        try:
            price = ad.find('div',class_='about').text.strip()
        except:
            price = ''
        try:
            metro = ad.find('div',class_='data').find_all('p')[-1].text.strip()
        except:
            metro = ''
        try:
            data_tovara = ad.find('div', class_='data').find('div',class_='clearfix').find('div',class_='data c-2').text.strip()
        except:
            data_tovara = ''
        try:
            opisanie = ad.find('div',class_='item-view-block').find('p').text.strip()
        except:
            opisanie = ''
        try:
            saller = ad.find('div',class_='seller-info-name')find('a').text.strip()
        except:
            saller = ''
        
data = {'title':title,
        'price':price,
        'metro':metro,
        'url':url,
        'data_tovara':data_tovara,
        'opisanie',opisanie,
        'saller':saller}
write_csv(data)
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?'
    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
        #print(url_gen)
        html = get_html(url_gen)
        get_page_data(html)
if __name__ == '__main__':
    main()

Офлайн

#2 Май 18, 2017 19:19:35

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Нужна помощь по парсеру Avito

Скопируй ошибку целиком. Обычно он там пишет на какой строке проблема.



Офлайн

#3 Май 18, 2017 19:33:48

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

Нужна помощь по парсеру Avito

Soteric
Скопируй ошибку целиком. Обычно он там пишет на какой строке проблема.
Вот именно , просто пишет invalid syntax и всё.

Офлайн

#4 Май 18, 2017 19:51:33

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Нужна помощь по парсеру Avito

Попробуй воспользоваться советом отсюда, как-то провалидировать синтаксис: http://stackoverflow.com/questions/4284313/how-can-i-check-the-syntax-of-python-script-without-executing-it



Офлайн

#5 Май 20, 2017 15:45:39

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Нужна помощь по парсеру Avito

ошибка в def get_page_data(html):
записано без = в последних скобках
ads = soup.find('div',class_='catalog-list').find_all('div',class_'item_table')
исправлено
ads = soup.find('div',class_='catalog-list').find_all('div',class_='item_table')
ошибка в def get_page_data(html): в последнем блоке try
пропущена точка в saller = ad.find('div',class_='seller-info-name')find('a').text.strip()
исправлено saller = ad.find('div',class_='seller-info-name').find('a').text.strip()
там же словарь data ключ значение ‘opisanie’,opisanie исправляем на ‘opisanie’через двоеточие opisanie

Отредактировано marvellik (Май 20, 2017 15:47:12)

Офлайн

#6 Май 20, 2017 17:32:25

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

Нужна помощь по парсеру Avito

marvellik
ошибка в def get_page_data(html):записано без = в последних скобкахads = soup.find('div',class_='catalog-list').find_all('div',class_'item_table')исправленоads = soup.find('div',class_='catalog-list').find_all('div',class_='item_table')ошибка в def get_page_data(html): в последнем блоке tryпропущена точка в saller = ad.find('div',class_='seller-info-name')find('a').text.strip()исправлено saller = ad.find('div',class_='seller-info-name').find('a').text.strip()там же словарь data ключ значение ‘opisanie’,opisanie исправляем на ‘opisanie’через двоеточие opisanie


спасибо))

Офлайн

#7 Май 21, 2017 20:56:50

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

Нужна помощь по парсеру Avito

Nick_15033
Ребят, возникла ошибка по парсеру. пишет invali syntax. Помогите пожалуйста с кодом.
Спасибо.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version