私は一日中pythonでxmlを解析することについて読んでいますが、データを抽出する必要があるサイトを見ていると、間違ったツリーを吠えているかどうかわかりません。基本的に、スーパーマーケットのWebサイトから13桁のバーコードを取得したい(画像の名前にあります)。例えば:
http://www.tesco.com/groceries/SpecialOffers/SpecialOfferDetail/Default.aspx?promoId=A31033985
には 11 個のアイテムと 11 個の画像があり、最初のアイテムのバーコードは 0000003235676 です。しかし、ページのソースを見ると (Python、urllib、beautifulsoup を使用して一度にすべてのバーコードを抽出するにはこれが最善の方法だと思います)。バーコードは 1 行 (12 行目) にありますが、要素と属性に関して期待するようにデータが構造化されていないようです。
new TESCO.sites.UI.entities.Product({name:"Lb Mens Mattifying Dust 7G",xsiType:"QuantityOnlyProduct",productId:"275303365",baseProductId:"72617958",quantity:1,isPermanentlyUnavailable:true,imageURL:"http://img.tesco.com/Groceries/pi/805/5021320051805/IDShot_90x90.jpg",maxQuantity:99,maxGroupQuantity:0,bulkBuyLimitGroupId:"",increment:1,price:2.5,abbr:"g",unitPrice:3.58,catchWeight:"0",shelfName:"Mens Styling",superdepartment:"Health & Beauty",superdepartmentID:"TO_1448953606"});
new TESCO.sites.UI.entities.Product({name:"Lb Mens Thickening Shampoo 250Ml",xsiType:"QuantityOnlyProduct",productId:"275301223",baseProductId:"72617751",quantity:1,isPermanentlyUnavailable:true,imageURL:"http://img.tesco.com/Groceries/pi/225/5021320051225/IDShot_90x90.jpg",maxQuantity:99,maxGroupQuantity:0,bulkBuyLimitGroupId:"",increment:1,price:2.5,abbr:"ml",unitPrice:1,catchWeight:"0",shelfName:"Mens Shampoo ",superdepartment:"Health & Beauty",superdepartmentID:"TO_1448953606"});
new TESCO.sites.UI.entities.Product({name:"Lb Mens Sculpting Puty 75Ml",xsiType:"QuantityOnlyProduct",productId:"275301557",baseProductId:"72617906",quantity:1,isPermanentlyUnavailable:true,imageURL:"http://img.tesco.com/Groceries/pi/287/5021320051287/IDShot_90x90.jpg",maxQuantity:99,maxGroupQuantity:0,bulkBuyLimitGroupId:"",increment:1,price:2.5,abbr:"ml",unitPrice:3.34,catchWeight:"0",shelfName:"Pastes, Putty, Gums, Pomades",superdepartment:"Health & Beauty",superdepartmentID:"TO_1448953606"});
たぶん、BeautifulSoup のようなものはやり過ぎですか? DOM ツリーは生のソースと同じではないことは理解していますが、なぜそれほど異なるのでしょうか。Firefox で要素を調べると、データは期待どおりに構造化されているようです。
これがまったくばかげていると思われる場合はお詫び申し上げます。事前に感謝します。