Найти - Пользователи
Полная версия: Нечувствительность к переносу строк при парсинге
Начало » Python для новичков » Нечувствительность к переносу строк при парсинге
1
hoolz
Доброго времени суток.

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

 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)))

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

aiscy
Используйте 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')))
JOHN_16
я за использование специализированных инструментов, но если говорить именно по сути - то наверное нужно построить регулярное выражение иначе что то вида <div blabla>\s*<img blabla>
py.user.next
  
>>> import re
>>> 
>>> text = 'abc\ndef\nghi'
>>> 
>>> re.findall(r'f.*g', text)
[]
>>> re.findall(r'f.*g', text, re.DOTALL)
['f\ng']
>>>
hoolz
aiscy
Благодарю за помощь
hoolz
aiscy
Кстати, а скачивание этих изображений как можно реализовать? Вроде пару строк, а всё никак не получается, перерыв Интернет…
aiscy
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())
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB