формат текста получен из красивого супа на питоне - PullRequest
0 голосов
/ 15 июня 2019

Я использовал красивый суп и извлек немного html, в результате чего:

print(e)
<p class="top-half listing-results-marketed">
<small>
                                Listed on 
18th Jan 2017


                            by
                    </small><br/>
<span>xxx Agents</span>

Я хочу извлечь только дату и агентов по недвижимости.

Для извлечения агента я использовал:

print(e.span.text)
xxx Agents

Для извлечения данных я использую:

print(e.small.text.strip())

и закончилось:

Listed on 
18th Jan 2017


                            by

Я новичок в регулярных выражениях в python и не знаю, как извлечь только раздел даты. Какие-либо предложения?

используемый код:

from bs4 import BeautifulSoup as soup
import requests
from datetime import datetime
import pandas as pd
url='https://www.zoopla.co.uk/for-sale/property/petts-wood/?page_size=100'

req=requests.get(url)
page_soup = soup(req.content,'html.parser')

containers = page_soup.findAll('div',{'class':'listing-results-wrapper'})

e=containers[0].find('p',{'class':'top-half listing-results-marketed'})  

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Попробуйте это:

import re

span_text = 'Listed on 18th Jan 2017                            by'
p = re.compile(r"[1-9]{1,2}[a-z]{2} [A-Z]{1}[a-z]{2} [0-9]{4}")
result = p.findall(span_text)

print(result)

#Output ['18th Jan 2017']

Сайт типа regexr отлично подходит для изучения регулярных выражений.

0 голосов
/ 15 июня 2019

Чтобы проанализировать строку даты для объекта datetime, вы можете использовать модуль re и функцию datetime.strptime ( doc ):

data = '''
<p class="top-half listing-results-marketed">
<small>
                                Listed on
18th Jan 2017


                            by
                    </small><br/>
<span>xxx Agents</span>'''

from bs4 import BeautifulSoup
from datetime import datetime
import re

soup = BeautifulSoup(data, 'lxml')

time_data = re.findall(r'(\d+).*?\s+([A-Za-z]+)\s+(\d{4})', soup.select_one('small').text)[0]
d = datetime.strptime(' '.join(time_data), '%d %b %Y')
print(d)

Отпечатки:

2017-01-18 00:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...