2015-11-05 54 views
1

鉴于this页,我在寻找脱身样式ID值:如何使用lxml(或BeautifulSoup)提取两个跨度之间的文本?

enter image description here

我得到的唯一的选择使用浏览器的开发者工具:

li.attribute-list-item:nth-child(1) > span:nth-child(1) 

这样的话与urllib2lxml的CSS功能:

import urllib2 
from lxml import etree 
from lxml.cssselect import CSSSelector  
req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"}) 
con = urllib2.urlopen(req) 
htmlparser = etree.HTMLParser() 
tree = etree.parse(con, htmlparser) 
x = CSSSelector('li.attribute-list-item:nth-child(1) > span:nth-child(1)') 

如果我再拿到X(树)的单个元素的文本值:

enter image description here

它给我的文字“风格ID”,而不是它后面的实际值。下面是它的外观:

enter image description here

如何走出数(在这个例子中,555088 117)?我也欢迎BeautifulSoup的建议。

编辑:我特别寻求基于CSS(类名或选择器)的方法。

+0

如果我想强调在Firebug或开发工具本身的数量,没有给我任何的方式来识别它(通过CSS,XPath或其他) – Pyderman

回答

2

随着requests + lxml

import requests 
from lxml import html 

response = requests.get("http://www.flightclub.com/air-jordan-1-retro-high-og-unc-white-dk-powder-blue-") 
tree = html.fromstring(response.content) 

style_id = tree.xpath('//ul[@class="mb-padding product-attribute-list"]/li[@class="attribute-list-item"][1]/text()[2]')[0].replace(',','').strip() 
print style_id 

输出:

555088 117 

注:

为了避免IndexError: list index out of range的情况下,网站结构的变化,你可以更换:

style_id = tree.xpath('//ul[@class="mb-padding product-attribute-list"]/li[1]/text()[2]')[0].replace(',','').strip() 

有了:

style_id = ''.join(tree.xpath('//ul[@class="mb-padding product-attribute-list"]/li[1]/text()[2]')).replace(',','').strip() 
+0

谢谢。因为所讨论的元素包含多个部分,换行符,空格等等(正如您发现的那样),这就是为什么我正在寻求更强大的基于CSS选择器的方法。 – Pyderman

+1

我的荣幸。我认为这是最准确的方法,因为全文是在一起的,而不是由任何节点划分的。我已将'li [1]'更新为'li [@ class =“attribute-list-item”] [1]'更具体。 –

相关问题