0

我正在使用 beautifulsoup 来抓取 HTML 数据。

我的问题是输出显示了一些我不想看到的信息,所以,我尝试使用正则表达式删除该信息,

但是,不擅长正则表达式,所以我把我的脚本和我想要的输出放在这里,希望任何人都可以帮助我。

问候

我的输出现在显示如下:

<title>Music Games DVDs at JB Hi-Fi Australia</title>
Apple iPad mini 16GB Wi-Fi (Black) [Pick-up In-store Only] 
                        <span class="SKU">MD528X/A</span>
Apple iPad mini 16GB Wi-Fi (White) [Pick-up In-store Only] 
                             <span class="SKU">MD531X/A</span>
Apple iPad mini 32GB Wi-Fi (Black) [Pick-up In-store Only] 
                        <span class="SKU">MD529X/A</span>

但是,我只希望它显示为:

JB Hi-Fi Australia

Apple iPad mini 16GB Wi-Fi (Black)

Apple iPad mini 16GB Wi-Fi (White)

以下是我的脚本

url1="http://www.jbhifionline.com.au/support.aspx?post=1&results=10&q=ipad+mini&source=all&bnSearch.x=0&bnSearch.y=0"
page=urllib2.urlopen(url1)
soup = BeautifulSoup(page.read())


#website source site name : <title>Music Games DVDs at JB   Hi-FiAustralia</title>
sitename1=soup.html.head.title
print sitename1     ##issue here!!output shows <title>....</title>

#website source name:<td class="check_title">Apple iPad mini 16GB Wi-Fi (Black)   [Pick-up In-store Only]<span class="SKU$`
productname1=soup.findAll('td',{'class':'check_title'})
for eachproductname1 in productname1:

    print  eachproductname1.renderContents().replace("^<span>","")
4

4 回答 4

0
for each in productname1:
x = each.contents[0].strip()
    x = re.sub(r'\[[\w\s-]*\][\xc2]',"",x)
    print x

输出:

 Apple iPad mini 16GB Wi-Fi (Black) 
 Apple iPad mini 16GB Wi-Fi (White) 
 Apple iPad mini 16GB Wi-Fi + Cellular (Black) 

我希望这有帮助。我不得不再次回答,因为这是完整的解决方案。

于 2013-05-31T00:41:37.143 回答
0
for eachproductname1 in productname1:
    print  eachproductname1.contents[0].strip()

输出:(你可以用你想要的方式修改它,我认为从这一点开始应该很容易)

Apple iPad mini 16GB Wi-Fi (Black) [Pick-up In-store Only]Â
Apple iPad mini 16GB Wi-Fi (White) [Pick-up In-store Only]Â
于 2013-05-31T00:19:59.787 回答
0

尝试这个 :

replace("<.+?>|\[.+?\]", "")
于 2013-05-30T16:47:08.090 回答
0

对于标题,剥离和标签应该很容易。然后你就只能从标题中去掉“Music Games DVDs at”了……那是不变的文字吗?由于这与您正在抓取的固定网站有关,为什么不直接对您想要的标题信息进行硬编码:JB Hi-Fi Australia?这似乎比尝试修剪您收到的字符串要容易得多。

对于给定的产品线,您是否希望剥离 [ 以及之后的所有内容?使用正则表达式应该很容易。我们是否一次只看一条线,所以

Apple iPad mini 16GB Wi-Fi (黑色) [仅限店内自取]Â

是分开的

             <span class="SKU">MD528X/A</span>

? 首先,类似

eachproductname1.renderContents().replace("\[.*$","")

而对于第二个(摆脱整条线),就像

eachproductname1.renderContents().replace("^[ \t]*<.*$","")

没有使用 Python 及其正则表达式的经验,我不能保证它可以直接开箱即用。您可能需要使用该代码进行一些操作。正如上一个答案中所建议的,您也许可以将两者组合成一个 egrep 表达式。

于 2013-05-30T16:55:49.703 回答