Scrapy:来自shell和脚本的不同结果

时间:2014-03-31 04:08:47

标签: python scrapy

我试图从website获取一些数据(文字,网址和观点)。

我厌倦了首先在scrapy shell中废弃它,一切正常。 但是当我将相同的代码移动到我的socrata_basr.py中时,只有视图返回结果,文本和网址为空。

我的socrata_basr.py代码:

# socrata_base.py - basespider

from scrapy.spider import BaseSpider
from scrapy.selector import Selector

from socrata.items import SocrataItem

class MySpider(BaseSpider):
    name = "socrata"
    allowed_domains = ["opendata.socrata.com"]
    start_urls = [
        "https://opendata.socrata.com"
            ]

    def parse(self, response):    
        hxs = Selector(response)
        titles = hxs.xpath('//tr[@itemscope="itemscope"]')
        items = []
        for t in titles:
             item = SocrataItem()
             item["text"] = t.xpath("td[2]/div[1]/a/text()").extract()
             item["url"] = t.xpath("td[2]/div[1]/a[@href]/@href").extract()
             item["views"] = t.xpath("td[3]/span/text()").extract()
             items.append(item)
        return(items)

我的管道代码:

import sqlite3

class SocrataPipeline(object):
    def __init__(self):
        self.conn = sqlite3.connect('project.db')
        self.cur = self.conn.cursor()

    def process_item(self, item, spider):
        self.cur.execute("insert into data (text, url, views) values(?,?,?)", (item['text'][0], item['url'][0], item['views'][0]))
        self.conn.commit()
        return item

如果我运行它,我会在这行代码中输出rang错误索引:

self.cur.execute("insert into data (text, url, views) values(?,?,?)", (item['text'][0], item['url'][0], item['views'][0]))

如果我将代码更改为:

self.cur.execute("insert into data (text, url, views) values(?,?,?)", ("text", "url", item['views'][0]))

它工作正常,我会有正确的#34;观点"结果存储。 所以我相信我不会为文本和网址获得任何结果,这就是为什么我会将索引排除在rang错误之外。

但是我在shell中测试了相同的scrapy代码,并且所有文本,url,视图都得到了纠正返回。

我的items.py

from scrapy.item import Item, Field

class SocrataItem(Item):
    # define the fields for your item here like:
    text = Field()
    url = Field()
    views = Field()

我的soc_bd.py:

import sqlite3

conn = sqlite3.connect("project.db")
cursor = conn.cursor()
cursor.execute('''CREATE TABLE data (text TEXT,url TEXT, views TEXT)''')

我不知道出了什么问题! 请帮忙!

谢谢!

0 个答案:

没有答案