使用SoupStrainer进行选择性解析

5 投票
2 回答
16720 浏览
提问于 2025-04-16 05:58

我正在尝试从一个购物网站上提取视频游戏的标题列表。不过,所有的商品信息都存储在一个标签里。

这个文档部分好像是讲如何只解析文档的一部分,但我搞不懂。我的代码是:

from BeautifulSoup import BeautifulSoup
import urllib
import re

url = "Some Shopping Site"
html = urllib.urlopen(url).read()
soup = BeautifulSoup(html)
for a in soup.findAll('a',{'title':re.compile('.+') }):
    print a.string

目前我的代码会打印出任何有非空标题的标签里的内容。但它也会打印出侧边栏里的“特价”商品。如果我能只提取产品列表的部分,那我就能一举两得了。

非常感谢。

2 个回答

0

先试着找一下产品列表的 div,然后再找带有标题的 a 标签:

product = soup.find('div',{'id': 'products'})
for a in product.findAll('a',{'title': re.compile('.+') }):
   print a.string
14

哦,我真是傻,我一直在找属性为 id = products 的标签,其实应该是 product_list。

如果有人来找的话,这里是最终的代码。

from BeautifulSoup import BeautifulSoup, SoupStrainer
import urllib
import re


start = time.clock()
url = "http://someplace.com"
html = urllib.urlopen(url).read()
product = SoupStrainer('div',{'id': 'products_list'})
soup = BeautifulSoup(html,parseOnlyThese=product)
for a in soup.findAll('a',{'title':re.compile('.+') }):
      print a.string

撰写回答