作者u9211008 (雪影)
看板Python
标题[问题] lxml 特定字串过滤
时间Tue Jun 11 11:30:07 2013
各位先进大家好
小弟最近为了要抓一些资料所以刚接触python这个程式
目前已经可以抓取网页原始码以及找出element内的text
不过有很多资讯是我不需要的,所以想问问看大大们有甚麽方式可以用lxml过滤
以下为部分原始码,网站链结我砍掉了部分
每个id後面都有一串文字,我想要透过那串文字去过虑我要的资料
例如id="ctl00_ContentPlaceHolder1_gvStock_ctl02_hyNumber
我想要用ctl00_ContentPlaceHolder1_gvStock作为过滤条件并且用hyNumber作分类
请各位大大能否指点一下,谢谢。
<a id="ctl00_ContentPlaceHolder1_gvStock_ctl02_hyNumber"
href="
http://corpinfocn.aspx?stockno=2429"
target="_blank">2429</a></td><td>
<a id="ctl00_ContentPlaceHolder1_gvStock_ctl02_hyStock"
href="
http://corpinfocn.aspx?stockno=2429"
target="_blank">铭旺科</a></td><td>
<span id="ctl00_ContentPlaceHolder1_gvStock_ctl02_lblPrice"
style="color:White;background-color:Red;">45.15</span></td><td>
<span id="ctl00_ContentPlaceHolder1_gvStock_ctl02_lblDifference"
style="color:White;background-color:Red;">▲2.95</span></td><td>
<span id="ctl00_ContentPlaceHolder1_gvStock_ctl02_lblPercent"
style="color:White;background-color:Red;">+6.99%</span></td><td>
<span id="ctl00_ContentPlaceHolder1_gvStock_ctl02_lblWeekPercent"
style="color:Red;">21.70%</span></td><td>
<span
id="ctl00_ContentPlaceHolder1_gvStock_ctl02_lblAmplitude">5.09%</span></td><td>
<span id="ctl00_ContentPlaceHolder1_gvStock_ctl02_lblHigh"
style="color:Red;">45.15</span></td><td>
<span id="ctl00_ContentPlaceHolder1_gvStock_ctl02_lblLow"
style="color:Red;">43.00</span></td><td>
<span
id="ctl00_ContentPlaceHolder1_gvStock_ctl02_lblLast">42.20</span></td><td>
<span id="ctl00_ContentPlaceHolder1_gvStock_ctl02_lblVolume"
title="17,000 股">17</span></td><td>
<span id="ctl00_ContentPlaceHolder1_gvStock_ctl02_lblMoney"
title="17,000 股">0.01</span></td>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.124.199.162
1F:→ kilfu0701:xpath + EXSLT ? 06/11 12:54
2F:→ vagrants:BeautifulSoup如何? 可以用regular expression找 06/11 19:23
当初就是看到相关文章说BS的效率蛮差的,所以没用
RE我是有想过,不过用了lxml我就觉得再用RE过滤感觉多此一举
目前程式如下
import urllib
from lxml eterr
html=urllib.urlopen('http:// ').read()
elements=etree.HTML(html)
text=element.xpath(u"//a")
for element in elements:
print element.text
我想在text=element.xpath(u"//a")这里面顺便加过滤字串
在ctl00_ContentPlaceHolder1_gvStock_ctl02_lblMoney
把ctl00_ContentPlaceHolder1_gvStock作为过滤条件
把lblMoney作为分类条件
如果只能用RE去过滤的话,请大大告知一下,顺便跟我说一下RE的效率如何,谢谢。
※ 编辑: u9211008 来自: 59.124.199.162 (06/13 13:04)
5F:→ u9211008:感谢K大的帮忙,现在可以捞出想要的资料了 06/13 17:39
6F:→ u9211008:接下来我先试试看如何将抓下来的资讯分类与排版 06/13 17:40
7F:推 vagrants:推~ 学到了不少东西 06/13 18:04
经由k大的指点已经能够抓取相关id的资料了,不过有时候会抓不到一些资料
其原因询问过k大後才知道子节点的内容有可能会没抓到,k大帮我解决这问题了
我把完整的程式码放上
# -*- coding: utf-8 -*-
import urllib
import lxml.etree
html=urllib.urlopen('http:// ').read()
tree=lxml.etree.HTML(html)
regexpNS = "
http://exslt.org/regular-expressions"
hrefs = tree.xpath("//a[re:match(@id,
'ctl00_ContentPlaceHolder1_gvStock(.*)')]|\
//span[re:match(@id,
'ctl00_ContentPlaceHolder1_gvStock(.*)')]", namespaces={'re': regexpNS})
for href in hrefs:
print "".join(href.itertext())
※ 编辑: u9211008 来自: 124.219.26.45 (06/17 20:18)
8F:→ swpoker:我还是喜欢re字串 06/18 10:29