使用SoupStrainer进行选择性解析
我正在尝试从一个购物网站上提取视频游戏的标题列表。不过,所有的商品信息都存储在一个标签里。
这个文档部分好像是讲如何只解析文档的一部分,但我搞不懂。我的代码是:
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