Scraperwiki:如何将数据保存到tab中的一个单元格中

2024-10-05 20:13:39 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的scraper代码,它从特定页面提取URL和相应的注释:

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保存所有的评论。因此,在一列中是URL,在第二列中是来自该URL的所有注释,而不是最后一条注释,这就是代码的最终结果。在


Tags: 代码inimporturlfordatahtmltable
1条回答
网友
1楼 · 发布于 2024-10-05 20:13:39

正如我从代码中看到的,您将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)

相关问题 更多 >