【问题标题】:Scraperwiki: how to save data into one cell in tableScraperwiki:如何将数据保存到表格的一个单元格中
【发布时间】:2013-08-08 01:12:32
【问题描述】:

这是我从该特定页面提取 URL 和相应 cmets 的刮板代码:

import scraperwiki
import lxml.html
from BeautifulSoup import BeautifulSoup
import urllib2
import re

for num in range(1,2):
    html_page = urllib2.urlopen("https://success.salesforce.com/ideaSearch?keywords=error&pageNo="+str(num))
    soup = BeautifulSoup(html_page)
    for i in range(0,10):
        for link in soup.findAll('a',{'id':'search:ForumLayout:searchForm:itemObj2:'+str(i)+':idea:recentIdeasComponent:profileIdeaTitle'}):
             pageurl = link.get('href')
             html = scraperwiki.scrape(pageurl)
             root = lxml.html.fromstring(html)

             for j in range(0,300):
                 for table in root.cssselect("span[id='ideaView:ForumLayout:ideaViewForm:cmtComp:ideaComments:cmtLoop:"+str(j)+":commentBodyOutput'] table"):
                     divx = table.cssselect("div[class='htmlDetailElementDiv']")
                     if len(divx)==1:
                         data = {
                             'URL' : pageurl,
                             'Comment' : divx[0].text_content()
                         }
                         print data


         scraperwiki.sqlite.save(unique_keys=['URL'], data=data)
         scraperwiki.sqlite.save(unique_keys=['Comment'], data=data)

当数据被保存到 scraperwiki 数据存储时,只有来自一个 URL 的最后一条评论被放入表中。我想要的是在每个 URL 的表中保存所有 cmets。因此,在一列中有 URL,在第二列中有来自该 URL 的所有 cmets,而不仅仅是最后一条注释,这就是这段代码的最终结果。

【问题讨论】:

    标签: python sql beautifulsoup scraperwiki


    【解决方案1】:

    从您的代码中可以看出,您将data 放在最内部的 for 循环中,并每次都为其分配一个新值。因此,当 for 循环结束并进入保存步骤时,data 将包含最后一条注释。我想你可以使用:

    for i in range(0,10):
            for link in soup.findAll('a',{'id':'search:ForumLayout:searchForm:itemObj2:'+str(i)+':idea:recentIdeasComponent:profileIdeaTitle'}):
                 pageurl = link.get('href')
                 html = scraperwiki.scrape(pageurl)
                 root = lxml.html.fromstring(html)
                 data = {'URL': pageurl, 'Comment':[]}
    
                 for j in range(0,300):
                     for table in root.cssselect("span[id='ideaView:ForumLayout:ideaViewForm:cmtComp:ideaComments:cmtLoop:"+str(j)+":commentBodyOutput'] table"):
                         divx = table.cssselect("div[class='htmlDetailElementDiv']")
                         if len(divx)==1:
                             data['Comment'].append(divx[0].text_content)
    
             scraperwiki.sqlite.save(unique_keys=['URL'], data=data)
             scraperwiki.sqlite.save(unique_keys=['Comment'], data=data)
    

    【讨论】:

    • 由于某种原因,当我在 scraperwiki 中运行此代码时,我收到此错误:文件“./code/scraper”,第 25 行 scraperwiki.sqlite.save(unique_keys=['URL'], data =data) ^ IndentationError: unindent 不匹配任何外部缩进级别
    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 2016-10-31
    相关资源
    最近更新 更多