- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前正在考虑将我抓取的数据保存到数据库中的好方法。
应用流程:
我希望您能帮助我了解如何通过 pipeline.py 将 spider.py 中的抓取数据(标题、链接、pubDate)保存到数据库中,目前我没有将这些文件连接在一起的方法。当数据爬取成功后需要通知管道,接收数据并保存
非常感谢你的帮助
蜘蛛.py
import urllib.request
import lxml.etree as ET
opener = urllib.request.build_opener()
tree = ET.parse(opener.open('https://nordfront.se/feed'))
items = [{'title': item.find('title').text, 'link': item.find('link').text, 'pubdate': item.find('pubDate').text} for item in tree.xpath("/rss/channel/item")]
for item in items:
print(item['title'], item['link'], item['pubdate'])
模型.py
from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.engine.url import URL
from sqlalchemy import UniqueConstraint
import datetime
import settings
def db_connect():
"""
Performs database connection using database settings from settings.py.
Returns sqlalchemy engine instance
"""
return create_engine(URL(**settings.DATABASE))
DeclarativeBase = declarative_base()
# <--snip-->
def create_presstv_table(engine):
DeclarativeBase.metadata.create_all(engine)
def create_nordfront_table(engine):
DeclarativeBase.metadata.create_all(engine)
def _get_date():
return datetime.datetime.now()
class Nordfront(DeclarativeBase):
"""Sqlalchemy deals model"""
__tablename__ = "nordfront"
id = Column(Integer, primary_key=True)
title = Column('title', String)
description = Column('description', String, nullable=True)
link = Column('link', String, unique=True)
date = Column('date', String, nullable=True)
created_at = Column('created_at', DateTime, default=_get_date)
管道.py
from sqlalchemy.orm import sessionmaker
from models import Nordfront, db_connect, create_nordfront_table
class NordfrontPipeline(object):
"""Pipeline for storing scraped items in the database"""
def __init__(self):
"""
Initializes database connection and sessionmaker.
Creates deals table.
"""
engine = db_connect()
create_nordfront_table(engine)
self.Session = sessionmaker(bind=engine)
def process_item(self, item, spider):
"""Save data in the database.
This method is called for every item pipeline component.
"""
session = self.Session()
deal = Nordfront(**item)
if session.query(Nordfront).filter_by(link=item['link']).first() == None:
try:
session.add(deal)
session.commit()
except:
session.rollback()
raise
finally:
session.close()
return item
Settings.py
DATABASE = {'drivername': 'postgres',
'host': 'localhost',
'port': '5432',
'username': 'toothfairy',
'password': 'password123',
'database': 'news'}
最佳答案
据我了解,这是一个 Scrapy 特有的问题。如果是这样,您只需要 activate your pipeline在 settings.py
中:
ITEM_PIPELINES = {
'myproj.pipeline.NordfrontPipeline': 100
}
这会让引擎知道将已抓取的项目发送到管道(请参阅 control flow ):
如果我们不是在谈论 Scrapy,那么,直接从您的蜘蛛中调用 process_item()
:
from pipeline import NordfrontPipeline
...
pipeline = NordfrontPipeline()
for item in items:
pipeline.process_item(item, None)
您还可以从 process_item()
管道方法中删除 spider
参数,因为它未被使用。
关于python - 将蜘蛛结果保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28300919/
我想使用这个过滤器从网站 http://www.quoka.de/immobilien/bueros-gewerbeflaechen 抓取数据: nur Angebote 如何使用scrapy设置这个
我正在研究制作网络爬虫/蜘蛛,但是我需要有人指出正确的方向才能上手。 基本上,我的Spider会搜索音频文件并将它们编入索引。 我只是想知道是否有人对我应该如何做有任何想法。我听说用PHP完成它会非常
如果 Nutch 页面已经在索引中,它们会再次索引它们吗?如果是这样,我该如何更改? 最佳答案 是和否。默认情况下,Nutch 只会在 1 个月的某个时间段(从内存中)重新索引页面,如果页面没有更改,
我在一个 Scrapy 项目中有两个蜘蛛。 Spider1 抓取页面列表或整个网站并分析内容。 Spider2 使用 Splash 获取 Google 上的 URL 并将该列表传递给 Spider1。
我正在使用 python scrapy 包。有没有办法在蜘蛛运行时更新 scrapy 蜘蛛设置?我尝试了 telnet 控制台并通过以下方式更新设置: settings.set('AUTOTHROTT
我正在尝试安装 Sphider 来搜索我的网站,当我尝试创建 MySQL 表时出现此错误: create table query_log ( query varchar(255), tim
正在关注 How to pass a user defined argument in scrapy spider ,我写了下面这个简单的蜘蛛: import scrapy class Funda1S
我正在开发一个简单的抓取工具来获取 9 个搞笑帖子及其图片,但由于一些技术困难,我无法停止抓取工具,它继续抓取,这是我不想要的。我想增加计数器值并在 100 个帖子后停止。但是 9gag 页面的设计方
我创建了一个 Scrapy 蜘蛛。但我想将它作为脚本运行。我该怎么做。现在我可以在终端中通过这个命令运行: $ scrapy crawl book -o book.json 但我想像运行一个简单的 p
我正在尝试构建一个系统来运行 a few dozen Scrapy spiders ,将结果保存到 S3,并在完成时通知我。 StackOverflow 上有几个类似的问题(例如 this one 和
我正在用 Python 编写蜘蛛来抓取网站。问题是,我需要检查大约 250 万页,所以我真的需要一些帮助来优化它的速度。 我需要做的是检查一定数量的页面,如果找到就记录该页面的链接。蜘蛛非常简单,它只
我需要创建一个用户可配置的网络蜘蛛/爬虫,我正在考虑使用 Scrapy。但是,我无法对域和允许的 URL regex:es 进行硬编码——这将在 GUI 中进行配置。 我如何(尽可能简单地)使用 Sc
我已经开始使用 Scrapy抓取一些网站。如果我稍后向我的模型添加一个新字段或更改我的解析函数,我希望能够离线“重放”下载的原始数据以再次抓取它。看起来 Scrapy 有能力在某一时刻将原始数据存储在
我的问题实际上是如何做与上一个问题相同的事情,但在 Scrapy 0.14 中。 Using one Scrapy spider for several websites 基本上,我有一个 GUI,它
我有一个关于 python (Python 2.7) IDE Spider (2.3.5.2) 的具体问题 今天我注意到我的脚本作为一个整体运行时有所不同,即当我按 F5 时。或者当我只运行一行或一个
我有一个 crontab 作业,运行一个 myautorun.sh 文件,其中包含 3 个蜘蛛: crontab -e 14 * * * * * ~bin/myautorun.sh myautorun
到目前为止,我的代码可以打开一个文本文件,将其处理成一个 pandas 数据文件,然后导出到 excel。 我正在与其他人共享此代码,我们在 Spyder 中都有相同的工作目录。所有代码都运行良好,我
最近想为Openstack添加自动登录功能。所以我为 openstack 编写了一个 python 蜘蛛,如下所示: import urllib import urllib2 import cooki
如何使用 PHP 检测爬虫/蜘蛛? 我目前正在做一个项目,我需要跟踪每个爬虫的访问。 我知道你应该使用 HTTP_USER_AGENT 但我不太确定如何为此目的格式化代码而且我知道可以很容易地更改 U
我已经使用 scrapy 编写了一个工作爬虫, 现在我想通过一个Django webapp来控制它,也就是说: 设置1个或多个start_urls 设置 1 个或多个 allowed_domains
我是一名优秀的程序员,十分优秀!