使用beautifulsoup通过Python抓取网页的问题

时间:2012-12-28 14:23:12

标签: python-2.7 screen-scraping beautifulsoup

我使用下面的参考代码从网站上抓取一些项目名称:

# -*- coding: cp1252 -*-
import csv
import urllib2
import sys
import time
from bs4 import BeautifulSoup

page = urllib2.urlopen('http://www.vodafone.de/privat/tarife/red-smartphone-tarife.html').read()
soup = BeautifulSoup(page)
soup.prettify()
items = soup.findAll('div', {"class": "txtBox"})
for item in items:
    print unicode(item.string).encode('utf8').strip()

问题:当我运行此代码时,会打印18个“无”而不是18个项目的名称。

输出摘录:

>>> 
None
None
None
None
None
None
None
None
None
None

1 个答案:

答案 0 :(得分:0)

你真的想先仔细看看你匹配的内容,这些是更复杂的HTML结构,而不仅仅是简单的标签:

>>> items = soup.findAll('div', {"class": "txtBox"})
>>> items[0]
<div class="txtBox">
<h3>iPhone 5</h3>
<div class="pr-stars" style="background-position: 0px -108px">
</div>
<div class="details">
<select id="color">
<option value="4">Weiß</option>
<option selected="selected" value="5">Schwarz</option>
</select>
<select id="size">
<option value="4">16 GB</option>
<option selected="selected" value="5">32 GB</option>
<option value="6">64 GB</option>
</select>
<ul>
<li>8 Megapixel-Kamera</li><li>A6 Chip</li><li>112 Gramm leicht</li></ul>
<div class="price">
<span id="price"><br/>
</span></div>
</div>
<div class="button">
<a class="vfmodal-trigger" href="#">Details </a>
</div>
</div>

您可能希望获取包含的<H3>标记的值(如果有):

for item in items:
    h3tag = item.find('h3')
    if h3tag is not None:
        print unicode(h3tag.string).encode('utf8').strip()