python でも xpath したい。
libxml でパースするには、lxml を使うと楽
pip install lxml
使い方。
lxml.html を使うと確実に、パースする事ができる。parse は IO を取るのでStringIOを使うことになる。
lxml.html.parse(StringIO(page.html))
サンプル
import lxml.html from io import StringIO, BytesIO def parse( node , idx ) : name = node.xpath(".//*[@class='desc-title']//text()")[0] url = node.xpath(".//a/@href")[0] img_url = node.xpath(".//img/@src")[0] price = node.xpath('.//div[contains(./@class, "desc-price")]//strong/text()')[0].replace(',','') identify_url = page.url + '#' + str(i+1) html = lxml.etree.tostring( node , pretty_print=True,method='xml', encoding='utf-8').decode('utf-8') item = Item(link=url,title=name,price=price,html=html, identify_url=identify_url,img_url=img_url ) return session.add(item) if __name__ == '__main__' : doc = lxml.html.parse(StringIO(page.html)) ret = doc.xpath("//li[@class='list-item']") for i, node in enumerate(ret) : parse( node,i)