使用python bs4从onclick属性获取值

时间:2013-09-04 14:35:52

标签: python regex web-scraping html-parsing beautifulsoup

我无法解析onclick属性以仅获取选定的值。这是onclick属性

onclick="try{appendPropertyPosition(this,'B10331465','9941951739','','Dealer','Murugan.N');jsb9onUnloadTracking();jsevt.stopBubble(event);}catch(e){};"

如何仅从此onclick属性中获取选定的值,例如(phonenumber,'','Dealer','Name')。这是我的代码。

from bs4 import BeautifulSoup
import urllib2
import re
url="http://www.99acres.com/property-in-velachery-chennai-south-ffid?"
page=urllib2.urlopen(url)
soup = BeautifulSoup(page.read())
properties = soup.findAll('a', title=re.compile('Bedroom'))
for eachproperty in properties:
 print "http:/"+ eachproperty['href']+",", eachproperty.string, eachproperty['onclick']

更新

我想从上面提到的onclick属性中只获得一个电话号码,尽管有很多。

例如,现在我正在

Y10765227, 9884877926, 9283183326,, Dealer, Rgmuthu
L10038779, 9551154555, ,, ,
R10831945, 9150000747, 9282109134, 9043728565, ,, ,
B10750123, 9952946340, , Dealer, Bala
R10763559, 9841280752, 9884797013, , Dealer, Senthil

这是我通过使用以下代码获得的

re.findall("'([a-zA-Z0-9,\s]*)'", (a['onclick'] if a else ''))

我试图以这样一种方式修改,即只检索一个电话号码,其余的应该消失。看起来应该是这样的

    Y10765227, 9884877926, Dealer, Rgmuthu
    L10038779, 9551154555
    R10831945, 9150000747
    B10750123, 9952946340, Dealer, Bala
    R10763559, 9841280752, Dealer, Senthil

我正在尝试使用

re.findall("'([a-zA-Z0-9,\s]*)'", (re.sub(r'([^,]+,[^,]+,)(.*?)([A-Za-z].*)', r'\1\0',a['onclick']) if a else ''))

但这似乎不起作用。

1 个答案:

答案 0 :(得分:4)

您可以使用正则表达式从onclick中获取数据:

properties = soup.findAll('a', title=re.compile('Bedroom'))
for eachproperty in properties:
    print re.findall("'([a-zA-Z0-9,\s]*)'", eachproperty['onclick'])

打印:

['Y10765227', '9884877926, 9283183326', '', 'Dealer', 'Rgmuthu']
['L10038779', '9551154555', ',', ',']
['R10831945', '9150000747, 9282109134, 9043728565', ',', ',']
['B10750123', '9952946340', '', 'Dealer', 'Bala']
['R10763559', '9841280752, 9884797013', '', 'Dealer', 'Senthil']
...

希望有所帮助。