Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
20 / 21 / 6
Регистрация: 30.06.2015
Сообщений: 431

Парсинг на одних регулярках

08.04.2016, 19:34. Показов 2169. Ответов 43
Метки нет (Все метки)

проблемы с картинками
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
import requests
import re
numb = 1
endd = ';preset=smartfon/'
startt = 'http://rozetka.com.ua/mobile-phones/c80003/filter/page='
def writeHeader(file):
    header = r"""<!DOCTYPE html>
    <html>
        <head>
            <meta charset='utf-8' />
            <title>Смартфоны на розетке</title>
        </head>
        """
    file.write(header)
    pass
 
def writeBody(file, data):
    file.write("\t<body>\n")
    file.write('<ul>')
    for i in data:
        file.write('<li><a href="{}">{}</a></li>'.format(*i))
        for i in data1:
            file.write('<img src="'+i+'"')
    file.write('</ul>')
    file.write("\t</body>\n")
    pass
 
def witeFooter(file):
    footer = "</html>"
    file.write(footer)
    pass
 
def writeToHTML(file, data):
    with open(file, 'a', encoding='utf-8') as f:
        writeHeader(f)
        writeBody(f, data)
        witeFooter(f)
outHTML = "result.html"
 
 
for z in range(11):
    ppp = requests.get(startt+str(numb)+endd)
    output = ppp.text
    reNameRef = re.compile(r'<div\s+class="g-i-tile-i-title.*\s+<a.*href="([^"]+)"[^>]+>\s+([^<]+?)(?:\n|\t)+', re.MULTILINE)
    data = reNameRef.findall(output)
    p = re.compile(r'http.*[jpg|png]')
    data1 = p.findall(output)
    writeToHTML(outHTML, data) 
    numb+=1
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.04.2016, 19:34
Ответы с готовыми решениями:

Группировка в регулярках
У меня есть, например строка: &quot;protected void fun(string name, bool b = false, Action&lt;string&gt; End = null);&quot; Сделал такой...

Обратный слешв регулярках
Нужно заменить последовательность символов a\\\a на ! Я написал выражение: echo preg_replace(&quot;#a\\\\{3}a#&quot;, &quot;!&quot;,...

Разница между () и [] в регулярках ( ecma. )
Hello world! Вопрос в заголовке темы.

43
20 / 21 / 6
Регистрация: 30.06.2015
Сообщений: 431
18.04.2016, 22:19  [ТС]
Jabbson, чтобы я без вас делал.

Добавлено через 1 минуту
просто zip нужно было нормально изучить...
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
18.04.2016, 23:35
Да как бы нормально все нужно изучать
0
20 / 21 / 6
Регистрация: 30.06.2015
Сообщений: 431
19.04.2016, 00:10  [ТС]
чтобы окончательно закрыть для себя эту тему, решил пособирать всю инфу со всех страниц, пагинация в общем, что для этого в моем понимании нужно сделать, просто часть кода загнать в for...как я его не загонял, то тошлько 1 страница сохранится, то только последняя...наверное нужно было сразу писать с расчетом на все страницы, а не на одну...в общем код итоговый такой
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
from bs4 import BeautifulSoup
import requests
import re
import csv
url = 'http://rozetka.com.ua/mobile-phones/c80003/filter/page=1;preset=smartfon/'
r = requests.get(url)
page = BeautifulSoup(r.text, "html.parser")
rows = page.findAll('div',{'class':"g-i-tile-i-title clearfix"})
names = []
pictures = []
prices = []
descriptions = []
for name in rows:
    names.append(name.text)
for i in range(len(names)):
    names[i] = names[i].strip()
 
divs = page.find_all('div', {'class':'g-i-tile-i-box-desc'})
 
for div in divs:
    pictures.append(div.find('img')['data_src'])
 
 
for js in divs:
    prices.append(js.find('script'))
    
r = re.compile('price_json.usd_price = (.*?);')
f = r.findall(str(prices))
prices = f
p = re.compile(r'<div\s+class="(?:g-i-tile-i-title.*\s+<a.*href=")([^"]+)(?:"[^>]+>\s+(?:[^<]+?)(?:\n|\t)+)')
links = p.findall(str(divs))
rows2 = page.findAll('ul',{'class':"g-i-tile-short-detail"})
for name in rows2:
    descriptions.append(name.text)
for i in range(len(descriptions)):
    descriptions[i] = descriptions[i].strip()
 
with open ('rozetka.csv','w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(('Название', 'Описсание', 'Цена', 'Ссылка на картинку', 'Ссылка на телефон'))
    for row in zip (names,descriptions,prices,pictures,links):
        writer.writerow(row)
0
20 / 21 / 6
Регистрация: 30.06.2015
Сообщений: 431
20.04.2016, 17:56  [ТС]
Может кто-то сможет направить насчет такого вопроса, а как получить отзывы ко всем товарам на данном примере?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2016, 17:56

Точное соответствие в str_pos или регулярках
Дoбрый день, А мoжнo ли в str_pos задать тoчнoе сooтветствие, чтoб например, слoвo Слoн, нахoдилoсь, а слoвo Слoны, т.е. уже с буквoй...

Класс для проверки сложности пароля. На регулярках
Помогите с регулярными выражениями, кто в них разбирается. Правильно ли тут все? Нужно доработать этот класс. Думаю очень многим он может...

Сжать двухмерный массив, удалить все столбцы состоящие из одних нулей и все строки состоящие из одних нулей
Помогите написать программу.

Парсинг по порядку или парсинг до определенного тега
Доброго времени друзья! Подскажите пожалуйста, к примеру есть вот такой html код: &lt;div class=&quot;container mt-3&quot;&gt; ...

Парсинг JSON ответа. Парсинг строки с массивами
Есть ответ с сервера в виде json: ,\&quot;Polygon\&quot;:,]}&quot;, &quot;OrganizationId&quot;: 2, &quot;SyncDate&quot;: &quot;2021-01-20T11:23:42.007&quot; ...


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

Или воспользуйтесь поиском по форуму:
44
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru