【发布时间】:2021-04-14 12:13:18
【问题描述】:
我在 scrapy 的数据挖掘项目有问题。当我运行我的蜘蛛时,我收到了这个错误消息,我真的不知道如何解决这个问题,请帮助我!
这是错误输出
2021-01-08 21:27:41 [scrapy.core.scraper] ERROR: Spider error processing <GET
https://yokatlas.yok.gov.tr/content/lisans-dynamic/1000_1.php?y=100110027> (referer: None)
Traceback (most recent call last):
File "C:\Anaconda3\lib\site-packages\scrapy\utils\defer.py", line 120, in iter_errback
yield next(it)
File "C:\Anaconda3\lib\site-packages\scrapy\utils\python.py", line 347, in __next__
return next(self.data)
File "C:\Anaconda3\lib\site-packages\scrapy\utils\python.py", line 347, in __next__
return next(self.data)
File "C:\Anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 64, in _evaluate_iterable
for r in iterable:
File "C:\Anaconda3\lib\site-packages\scrapy\spidermiddlewares\offsite.py", line 29, in
process_spider_output
for x in result:
File "C:\Anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 64, in _evaluate_iterable
for r in iterable:
File "C:\Anaconda3\lib\site-packages\scrapy\spidermiddlewares\referer.py", line 340, in <genexpr>
return (_set_referer(r) for r in result or ())
File "C:\Anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 64, in _evaluate_iterable
for r in iterable:
File "C:\Anaconda3\lib\site-packages\scrapy\spidermiddlewares\urllength.py", line 37, in <genexpr>
return (r for r in result or () if _filter(r))
File "C:\Anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 64, in _evaluate_iterable
for r in iterable:
File "C:\Anaconda3\lib\site-packages\scrapy\spidermiddlewares\depth.py", line 58, in <genexpr>
return (r for r in result or () if _filter(r))
File "C:\Anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 64, in _evaluate_iterable
for r in iterable:
File "C:\Users\yusuf\Desktop\Yök Atlas Projesi\atlasdatas\atlasdatas\spiders\atlasspider.py", line
46, in parse
items["ÖSYM_KODU"] = ÖSYM_KODU
TypeError: 'Selector' object does not support item assignment
2021-01-08 21:27:41 [scrapy.core.engine] INFO: Closing spider (finished)
2021-01-08 21:27:41 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 712,
'downloader/request_count': 3,
'downloader/request_method_count/GET': 3,
'downloader/response_bytes': 27358,
'downloader/response_count': 3,
'downloader/response_status_count/200': 2,
'downloader/response_status_count/302': 1,
'elapsed_time_seconds': 0.978011,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2021, 1, 8, 18, 27, 41, 343786),
'log_count/DEBUG': 36,
'log_count/ERROR': 1,
'log_count/INFO': 10,
'response_received_count': 2,
'robotstxt/request_count': 1,
'robotstxt/response_count': 1,
'robotstxt/response_status_count/200': 1,
'scheduler/dequeued': 1,
'scheduler/dequeued/memory': 1,
'scheduler/enqueued': 1,
'scheduler/enqueued/memory': 1,
'spider_exceptions/TypeError': 1,
'start_time': datetime.datetime(2021, 1, 8, 18, 27, 40, 365775)}
2021-01-08 21:27:41 [scrapy.core.engine] INFO: Spider closed (finished)
我的 Spider.py 文件
import scrapy
from atlasdatas.items import AtlasdatasItem
class Atlasdatas(scrapy.Spider):
name = "atlas"
def start_requests(self):
urls = ['https://yokatlas.yok.gov.tr/content/lisans-dynamic/1000_1.php?y=100110027']
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
items = AtlasdatasItem()
parse_place = response.css("table.table-bordered")
for items in parse_place:
#PROGRAM_İSMİ = items.css("big::text")[0].getall()
ÖSYM_KODU = items.css("td.text-center::text")[0].get()
ÜNİVERSİTE_TÜRÜ = items.css("td.text-center::text")[1].get()
ÜNİVERSİTE_İSMİ = items.css("td.text-center::text")[2].get()
FAKÜLTE_YÜKSEKOKUL = items.css("td.text-center::text")[3].get()
PUAN_TÜRÜ = items.css("td.text-center::text")[4].get()
BURS_TÜRÜ = items.css("td.text-center::text")[5].get()
#items["PROGRAM_İSMİ"] = PROGRAM_İSMİ
items["ÖSYM_KODU"] = ÖSYM_KODU
items["ÜNİVERSİTE_TÜRÜ"] = ÜNİVERSİTE_TÜRÜ
items["ÜNİVERSİTE_İSMİ"] = ÜNİVERSİTE_İSMİ
items["FAKÜLTE_YÜKSEKOKUL"] = FAKÜLTE_YÜKSEKOKUL
items["PUAN_TÜRÜ"] = PUAN_TÜRÜ
items["BURS_TÜRÜ"] = BURS_TÜRÜ
yield items
和我的 items.py 文件,哪些数据将保存在 sqlite3 数据库中
import scrapy
class AtlasdatasItem(scrapy.Item):
#PROGRAM_İSMİ = scrapy.Field()
ÖSYM_KODU = scrapy.Field()
ÜNİVERSİTE_TÜRÜ = scrapy.Field()
ÜNİVERSİTE_İSMİ = scrapy.Field()
FAKÜLTE_YÜKSEKOKUL = scrapy.Field()
PUAN_TÜRÜ = scrapy.Field()
BURS_TÜRÜ = scrapy.Field()
还有我的 pipelines.py 文件
import sqlite3
class AtlasDB(object):
def __init__(self):
self.create_connection()
self.create_table()
def create_connection(self):
self.conn = sqlite3.connect("atlasdb")
self.curr = self.conn.cursor()
def create_table(self):
self.curr.execute(
"""CREATE TABLE GENERAL_INF(
OSYM_KODU INT PRIMARY KEY NOT NULL,
ÜNİVERSİTE_TÜRÜ TEXT,
ÜNİVERSİTE_İSMİ TEXT,
FAKÜLTE_YÜKSEKOKUL TEXT,
PUAN_TÜRÜ TEXT,
BURS_TÜRÜ TEXT)"""
)
def process_ıtems(self,item,spider):
self.store_db(item)
return item
def store_db(self,item):
self.curr.execute("""INSERT INTO VALUES
GENERAL_INF values (?,?,?,?,?,?)""",(
item["ÖSYM_KODU"][0],
item["ÜNİVERSİTE_TÜRÜ"][0],
item["ÜNİVERSİTE_İSMİ"][0],
item["FAKÜLTE_YÜKSEKOKUL"][0],
item["PUAN_TÜRÜ"][0],
item["BURS_TÜRÜ"][0]
))
self.conn.commit()
return item
遇到这种情况应该怎么办
【问题讨论】:
-
我试过了,但没用 :(
-
minimal, reproducible example 可以为您提供更多反馈,甚至可以帮助您自己找出问题所在。
标签: python database web-scraping scrapy data-mining