2017-03-04 11 views
0

指定されたWebサイトの 'MANUFACTURING AT A GLANCE'テーブルからWeb要素を抽出します。しかし、行の名前は '(一重引用符)です。これは私の構文に干渉しています。どうすればこの問題を克服できますか?このコードは他の行に対しても機能します。XPath(lxml)で引用符を管理する

import requests 
from lxml import html, etree 

ism_pmi_url = 'https://www.instituteforsupplymanagement.org/ismreport/mfgrob.cfm?SSO=1' 
page = requests.get(ism_pmi_url) 
tree = html.fromstring(page.content) 

PMI_CustomerInventories = tree.xpath('//strong[text()="Customers' Inventories"]/../../following-sibling::td/p/text()') 
PMI_CustomerInventories_Curr_Val = PMI_CustomerInventories[0] 

答えて

0

これはあなたの問題を回避するための私のアプローチです。 あなたは本当に必要なものではないかもしれませんが、あなたがそのアイデアを得るのに役立つかもしれません。

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import lxml.html 
import re 
import requests 
import lxml.html 
from pprint import pprint 

def load_lxml(response): 
    return lxml.html.fromstring(response.text) 

url = 'https://www.instituteforsupplymanagement.org/ismreport/mfgrob.cfm?SSO=1' 
response = requests.get(url) 
root = load_lxml(response) 

headers = [] 
data = [] 
for index,row in enumerate(root.xpath('//*[@id="home_feature_container"]/div/div/div/span/table[2]/tbody/tr')): 
    rows = [] 
    for cindex,column in enumerate(row.xpath('./th//text() | ./td//text()')): 
     if cindex == 1: 
      continue 
     column = column.strip() 
     if index == 0 or not column: 
      continue 
     elif index == 1: 
      headers.append(column) 
     else: 
      rows.append(column) 

    if rows and len(rows) == 6: 
     data.append(rows) 


data.insert(0,headers) 

pprint(data)  

結果:

[['Series Index', 
    'Feb', 
    'Series Index', 
    'Jan', 
    'Percentage', 
    'Point', 
    'Change', 
    'Direction', 
    'Rate of Change', 
    'Trend* (Months)'], 
['65.1', '60.4', '+4.7', 'Growing', 'Faster', '6'], 
['62.9', '61.4', '+1.5', 'Growing', 'Faster', '6'], 
['54.2', '56.1', '-1.9', 'Growing', 'Slower', '5'], 
['54.8', '53.6', '+1.2', 'Slowing', 'Faster', '10'], 
['51.5', '48.5', '+3.0', 'Growing', 'From Contracting', '1'], 
['47.5', '48.5', '-1.0', 'Too Low', 'Faster', '5'], 
['68.0', '69.0', '-1.0', 'Increasing', 'Slower', '12'], 
['57.0', '49.5', '+7.5', 'Growing', 'From Contracting', '1'], 
['55.0', '54.5', '+0.5', 'Growing', 'Faster', '12'], 
['54.0', '50.0', '+4.0', 'Growing', 'From Unchanged', '1']] 
[Finished in 2.9s] 
+0

あなたはwu4m4nありがとうございます。私は時々ウェブサイトが少し変わることに気づいた。 Xパスは '/ div/div/div /'から '/ div/div [2]/div /'などに変更されます。これはまったく予測できません。だから、コードは過去にこの手法で失敗しました。 –

関連する問題