作者mirror012020 (小B)
看板Python
標題[問題] 關於htmlparser的tag
時間Tue Sep 14 23:43:40 2010
請問一下,關於tag的問題
我抓同一個網頁的資料,有些資料一直抓不出來
後來我查attrs發現,只要走到下面這段程式碼的第三行,就會中斷
print attrs
會到[('style', 'height:1.2em;overflow:hidden;word-break:break-all;')]
就停止
<div class="Prod_Desc">
<span class="RedName">
<div style="height:1.2em;overflow:hidden;word-break:break-all;"><a href="/gdsale/gdsale.asp?gdid=2331049 "style="color: #FF0000;">大全配新機~送4G+充電池組+原包...<br></a></div></span>
---
我想抓的是tag=a name=href下的value (也就是/gdsale/gdsale.asp?gdid=XXX)
我想請問該怎麼解決~"~
我的程式碼如下:
class parseLinks2(HTMLParser.HTMLParser):
def __init__(self):
HTMLParser.HTMLParser.__init__(self)
self.myinput=[]
def handle_starttag(self, tag, attrs):
if tag=='a':
for name,value in attrs:
if name=='href':
self.myinput.append(value)
---
請知道的幫個忙,謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.172.216.17
※ 編輯: mirror012020 來自: 218.172.216.17 (09/15 00:24)
1F:推 kaichan:先用 re 把 style 除掉? 我想不到方法的時候會這樣做 09/15 00:36
請問要怎麼把style除掉呢?
我的想法是 re.search('style',attrs)
如果 is None 才執行,不然就不執行
可是 re.search('style',attrs)
一直錯誤,好像是因為attrs是清單,但是我不知道如何取出他>"<
2F:推 seedman:看來就是內建的htmlparser容錯比較弱 你可以用lxml 09/15 00:52
3F:→ seedman:不然手動re <a[^>]+href="(.+?)"[^>]+> group(1)取出 09/15 00:59
請問~ 手動 re 是這樣寫嗎?
aa = re.match('<a[^>]+href="(.+?)"[^>]+>',scontent2)
aa.group(1)
可是一直出現錯誤訊息@@"
我還是搞不懂手動re的意思,是就不用進去htmlparser裡面了嗎?
只要把網頁讀出來?!
※ 編輯: mirror012020 來自: 218.172.216.17 (09/15 02:21)
4F:推 seedman:就是把網頁當字串來找 發現用re.findall的話連group都不用 09/15 07:48
5F:→ seedman:你的錯誤訊息是甚麼 09/15 07:49
用上面那個寫法,錯誤訊息是AttributeError
'NoneType' object has no attribute 'group'
我用了re.findall有成功叫出來,但是有些也會失誤@@"~
我請想問一下 <a[^>]+href="(.+?)"[^>]+> 的 "(.+?)"是什麼意思呢?
※ 編輯: mirror012020 來自: 218.172.216.111 (09/15 17:05)
7F:→ seedman:.任意字元 +?一個以上越短越好 ()把這段群組起來 09/15 18:28
8F:→ seedman:會NoneType表示沒有找到合pattern的 大概哪裡有錯? 09/15 18:28
9F:推 kaichan:手動re 我會做在 feed 裡 或是在 feed data 之前 09/16 00:31
謝謝你們!這個部份我解決囉^^
直接收尋re.findall('<a[^>]+href="(.+?)"', scontent2) 有成功將我要的收集在清單
※ 編輯: mirror012020 來自: 218.172.218.4 (09/21 12:49)