Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 10, 2017 15:04:09

hoolz
Зарегистрирован: 2016-09-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Нечувствительность к переносу строк при парсинге

Доброго времени суток.

Имеется простенький парсер, который выгружает необходимую мне информацию с сайтов.

 site = urllib.request.urlopen('http://steamcommunity.com/sharedfiles/filedetails/?id=308490450')
html = site.read().decode('utf8')
img = re.findall (r'<div class="highlight_strip_item highlight_strip_screenshot" id=".*" ><img src="(.*?)"></div>', str(html))
print(str("".join(img)))

Но при работе со строками с переносами строк не работает. Как пофиксить?

Офлайн

#2 Фев. 10, 2017 16:03:29

aiscy
Зарегистрирован: 2015-06-17
Сообщения: 52
Репутация: +  9  -
Профиль   Отправить e-mail  

Нечувствительность к переносу строк при парсинге

Используйте lxml или BeautifulSoup, зачем вам этот мазохизм?

 from bs4 import BeautifulSoup
from urllib.request import urlopen
site = urlopen('http://steamcommunity.com/sharedfiles/filedetails/?id=308490450')
html = site.read()
soup = BeautifulSoup(html, 'html.parser')
print(''.join(img['src'] for img in soup.select('div.highlight_strip_screenshot > img')))

Офлайн

#3 Фев. 10, 2017 22:16:19

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Нечувствительность к переносу строк при парсинге

я за использование специализированных инструментов, но если говорить именно по сути - то наверное нужно построить регулярное выражение иначе что то вида <div blabla>\s*<img blabla>



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Фев. 11, 2017 04:02:22

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

Нечувствительность к переносу строк при парсинге

  
>>> import re
>>> 
>>> text = 'abc\ndef\nghi'
>>> 
>>> re.findall(r'f.*g', text)
[]
>>> re.findall(r'f.*g', text, re.DOTALL)
['f\ng']
>>>



Отредактировано py.user.next (Фев. 11, 2017 04:08:02)

Офлайн

#5 Фев. 11, 2017 11:18:36

hoolz
Зарегистрирован: 2016-09-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Нечувствительность к переносу строк при парсинге

aiscy
Благодарю за помощь

Офлайн

#6 Фев. 11, 2017 11:24:43

hoolz
Зарегистрирован: 2016-09-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Нечувствительность к переносу строк при парсинге

aiscy
Кстати, а скачивание этих изображений как можно реализовать? Вроде пару строк, а всё никак не получается, перерыв Интернет…

Офлайн

#7 Фев. 11, 2017 22:05:10

aiscy
Зарегистрирован: 2015-06-17
Сообщения: 52
Репутация: +  9  -
Профиль   Отправить e-mail  

Нечувствительность к переносу строк при парсинге

hoolz
Кстати, а скачивание этих изображений как можно реализовать?
Ну как-то так:
 #
from bs4 import BeautifulSoup
from urllib.request import urlopen, urlparse, urlunparse
from mimetypes import guess_extension
site = urlopen('http://steamcommunity.com/sharedfiles/filedetails/?id=308490450')
html = site.read()
soup = BeautifulSoup(html, 'html.parser')
for full_url in (img['src'] for img in soup.select('div.highlight_strip_screenshot > img')):
    url = urlparse(full_url)
    opened_url = urlopen(urlunparse((url.scheme, url.netloc, url.path, '', '', '')))  # Собираем ссылку без параметров
    file_name = url.path.split('/')[3]
    file_extension = guess_extension(opened_url.info().get_content_type())
    if file_extension in ('.jpeg', '.jpe'):  # Костыль >:D
        file_extension = '.jpg'
    with open(file_name + file_extension, 'wb') as file:
        file.write(opened_url.read())

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version