刮擦:不同的结果从贝壳和纸条

2024-06-09 16:50:15 发布

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

我试图从website获取一些数据(文本、url和视图)。在

我想先把它扔进破壳里,一切都很好。 但当我把同样的代码移到我的socrata_巴斯比,只有视图返回结果,文本和url为空。在

我的索克拉塔_巴斯比代码:

# 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)

我的管道代码:

^{pr2}$

如果我运行它,我将在这行代码中出现索引超出范围的错误:

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]))

它工作良好,我将有正确的“视图”结果存储。 所以我相信我没有得到文本和url的任何结果,这就是为什么我会有索引超出范围的错误。在

但是我在shell中测试同样的代码,所有的文本、url、视图都被更正返回。在

我的项目.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)''')

我不知道怎么了! 请帮忙!在

谢谢!!在


Tags: 代码textfrompy文本import视图url