微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

BeautifulSoup:从锚标记中提取文本

如何解决BeautifulSoup:从锚标记中提取文本

以上所有答案确实可以帮助我构建答案,因此,我对其他用户提出的所有答案投了赞成票:但是我最终对自己正在处理的确切问题汇总了自己的答案:

正如明确定义的问题一样,我必须以dom结构访问某些兄弟姐妹及其子代:此解决方案将迭代dom结构中的图像,并使用产品标题构造图像名称,并将图像保存到本地目录。

    import urlparse
    from urllib2 import urlopen
    from urllib import urlretrieve
    from BeautifulSoup import BeautifulSoup as bs
    import requests

    def getimages(url):
        #Download the images
        r = requests.get(url)
        html = r.text
        soup = bs(html)
        output_folder = '~/amazon'
        #extracting the images that in div(s)
        for div in soup.findAll('div', attrs={'class':'image'}):
            modified_file_name = None
            try:
                #getting the data div using findNext
                nextDiv =  div.findNext('div', attrs={'class':'data'})
                #use findNext again on prevIoUs object to get to the anchor tag
                fileName = nextDiv.findNext('a').text
                modified_file_name = fileName.replace(' ','-') + '.jpg'
            except TypeError:
                print 'skip'
            imageUrl = div.find('img')['src']
            outputPath = os.path.join(output_folder, modified_file_name)
            urlretrieve(imageUrl, outputPath)

    if __name__=='__main__':
        url = r'http://www.amazon.com/s/ref=sr_pg_1?rh=n%3A172282%2Ck%3Adigital+camera&keywords=digital+camera&ie=UTF8&qid=1343600585'
        getimages(url)

解决方法

我要提取:

  • 来自image标签的src的文本和
  • div类数据内的定位标记的文本

我成功地提取了img src,但是从锚标记中提取文本时遇到了麻烦。

<a class="title" href="http://www.amazon.com/Nikon-COOLPIX-Digital-Camera-NIKKOR/dp/B0073HSK0K/ref=sr_1_1?s=electronics&amp;ie=UTF8&amp;qid=1343628292&amp;sr=1-1&amp;keywords=digital+camera">Nikon COOLPIX L26 16.1 MP Digital Camera with 5x Zoom NIKKOR Glass Lens and 3-inch LCD (Red)</a>

这是整个HTML页面的链接。

这是我的代码:

for div in soup.findAll('div',attrs={'class':'image'}):
    print "\n"
    for data in div.findNextSibling('div',attrs={'class':'data'}):
        for a in data.findAll('a',attrs={'class':'title'}):
            print a.text
    for img in div.findAll('img'):
        print img['src']

我想做的是 提取图像src(链接)和中的标题div class=data,因此例如:

 <a class="title" href="http://www.amazon.com/Nikon-COOLPIX-Digital-Camera-NIKKOR/dp/B0073HSK0K/ref=sr_1_1?s=electronics&amp;ie=UTF8&amp;qid=1343628292&amp;sr=1-1&amp;keywords=digital+camera">Nikon COOLPIX L26 16.1 MP Digital Camera with 5x Zoom NIKKOR Glass Lens and 3-inch LCD (Red)</a>

应该提取:

Nikon COOLPIX L26 16.1 MP Digital Camera with 5x Zoom NIKKOR Glass Lens and 3-inch LCD (Red)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。