Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: Web
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
newbieproger
0 / 0 / 0
Регистрация: 23.07.2017
Сообщений: 8
1

Парсинг поисковой выдачи // цикл

17.08.2017, 10:52. Просмотров 1278. Ответов 4

Привет, форумчане! Помогите разобраться...

Пишу парсер для Яндекс.поиска. Должен собирать с нескольких страниц (в примере с двух) только рекламные объявления и записывать их в csv. Записывает номер страницы выдачи, позицию объявления, заголовок и сайт. Ниже рабочий код, где поисковый запрос указан в самом коде. Но во втором примере (битый код), когда запрос берется из txt, результаты не правильные. Коды различаются только в def main().Помогите поправить, чтобы он корректно работал. И не для одного поискового запроса, а для нескольких расположенных в строках txt.

Благодарен за любую помощь!

РАБОЧИЙ КОД:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def main():
 
    #составные части ссылки
    base_url = 'https://yandex.ru/search/?text='
    query_part = 'купить%20окна'
    page_part = '&p='
 
 
    #указать число страниц для парсинга выдачи по ключевому запросу, сгенерировать ссылки
    for i in range (0, 2):
        url_gen = base_url + query_part + page_part + str(i)
        
        html = get_html(url_gen)
        get_page_data(html)
БИТЫЙ КОД:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import requests
from bs4 import BeautifulSoup
import csv
 
def get_html(url):
    r = requests.get(url)
    return r.text
 
def write_csv(data, page):
    with open('Yandex_paid.csv', 'a', encoding='UTF-8') as f:
        writer = csv.writer(f)
 
        writer.writerow((page['page'],
                         data['pos'],
                         data['title'],
                         data['site']))
 
 
def get_page_data(html):
    soup = BeautifulSoup(html, 'html5lib')
 
    #найти все рекламные объявления
    ads = soup.find('div', class_='content__left').find_all('li', class_='serp-item t-construct-adapter__adv serp-adv-item')
    #найти номер текущей страницы
    page = soup.find('span', class_='pager__item pager__item_current_yes pager__item_kind_page').text
    #создать словрь с номером страницы
    page = {'page': page}
 
    #сбор нужной инф из объявлений
    for ad in ads:
        try:
            pos = ad.get('data-cid')
        except:
            pos = ''
 
        try:
            title = ad.find('a', class_='link').text.strip()
        except:
            title =''
 
        try:
            site = ad.find('div', class_='path').text.split('/')[0]
        except:
            site = ''
        #создать словарь с инф рекламных объявлений
        data = {'pos': pos,
                'title': title,
                'site': site}
        #передать словари с номером страницы и инф объявлений в функцию записи .csv
        write_csv(data, page)
 
def main():
 
    #составные части ссылки
    base_url = 'https://yandex.ru/search/?text='
    page_part = '&p='
 
    with open('Key_words.txt', 'r') as file:
        for query_part in file.readlines():
 
    #указать число страниц для парсинга выдачи по ключевому запросу, сгенерировать ссылки
            for i in range (0, 2):
                url_gen = base_url + query_part + page_part + str(i)
        
                html = get_html(url_gen)
                get_page_data(html)
 
if __name__ == '__main__':
    main()
0
Вложения
Тип файла: txt Key_words.txt (13 байт, 9 просмотров)
Тип файла: txt Результат_битый.txt (1.2 Кб, 5 просмотров)
Тип файла: txt Результат_рабочий.txt (1.6 Кб, 6 просмотров)
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2017, 10:52
Ответы с готовыми решениями:

Как спарсить результат выдачи Google
Всем привет,не подскажите как все-таки парсить выдачу поиска Google.пробовал...

Парсинг выдачи поисковой системы
Всем привет! Я новенький в ruby/rails, да и в программировании, уже пару...

Парсинг поисковой выдачи yandex
Здравствуйте. Подскажите пожалуйста где можно почитать о парсинге поисковой...

кодировка сайта с поисковой выдачи
доброго времени суток. такая проблема, - в поисковике гугл, в поисковой...

Парсер поисковой выдачи яндекса
здравствуйте. совершенно новая тема для меня парсеры. мне надо написать как...

4
Garry Galler
1438 / 1159 / 426
Регистрация: 28.10.2013
Сообщений: 2,943
17.08.2017, 16:23 2
page_part.strip()
У вас из файла читается вместе с символом конца строки.
0
newbieproger
0 / 0 / 0
Регистрация: 23.07.2017
Сообщений: 8
17.08.2017, 16:34  [ТС] 3
Garry Galler, стрип не помог(

У меня в файле, который формируется, для 2-ой страницы нет объявлений на 1-4 позиции. Хотя на самом деле там конечно есть реклама. Вот я и думаю что проблема где-то в цикле.
0
Garry Galler
1438 / 1159 / 426
Регистрация: 28.10.2013
Сообщений: 2,943
17.08.2017, 16:48 4
Лучший ответ Сообщение было отмечено newbieproger как решение

Решение

Не там strip: query_part.strip() - то есть в той части которую читаете из файла.
И еще вы неправильно указали строку запроса в файле.
У вас: купить20%окна, а нужно - купить%20окна
1
newbieproger
0 / 0 / 0
Регистрация: 23.07.2017
Сообщений: 8
17.08.2017, 17:04  [ТС] 5
Garry Galler, Спасибо! Действительно, дело было в %20. Чертова невнимательность...
0
17.08.2017, 17:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2017, 17:04

Сайт пропал из поисковой выдачи
Здравствуйте, столкнулся с такой проблемой, сайт http://sevastopolkran.ru/ ,...

Java Jsoup парсер поисковой выдачи
Здравствуйте, попытался сделать парсер для Яндекса и Google, но каждый раз...

Скрипт парсинга поисковой выдачи Google
Есть скрипт для парсинга результатов поиска Google, получая на входе ключевое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru