我试图从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)''')
我不知道出了什么问题! 请帮忙!
谢谢!