def _div_to_payment(self, div): price_xpath = './/span[contains(@data-pageobject,"price")]' cost_str = text_at_xpath(div, price_xpath) cost = text_to_cost(cost_str) def parse_date(date_str, format_str): return datetime.strptime(date_str, format_str).date() date_xpath = './/span[@data-pageobject="statement-date"]' date_str = text_at_xpath(div, date_xpath) date = parse_date(date_str, "%d/%m/%Y") p = Payment(cost, date) def has_element(d, xpath_str): return first(d.xpath(xpath_str)) is not None warning_xpath = './/img[contains(@class, "warning-icon")]' p.warning = has_element(div, warning_xpath) autocompleted_xpath = './/img[contains(@class, "autocompleted")]' p.autocompleted = has_element(div, autocompleted_xpath) capped_xpath = './/img[contains(@class, "capped")]' p.capped = has_element(div, capped_xpath) p.journeys = self._div_to_journeys(div) return p