在python2环境中使用scrapy,我想使用sqlalchemy查询数据库中的URL列表,然后将该URL列表发送给scrapy,用作其start\u URL列表。你知道吗
文件名为贝西.py我通过键入以下命令来执行整个事件:
scrapy runspider betsy.py
这应该是一个相当简单的程序,双重检查404等,我不需要做任何进一步的爬行,一旦我达到这些网址。你知道吗
以下是我认为相关的代码:
class LandingPages(Base):
__tablename__ = 'landingpages_programmatic'
id = Column(Integer, primary_key=True)
client_id = Column(Integer, nullable=True)
campaign_id = Column(Integer, nullable=True)
ad_id = Column(Integer, nullable=True)
ad_url = Column(String(512), nullable=True)
ad_url_utm = Column(String(512), nullable=True)
created_on = Column(DateTime(),default=datetime.now)
def __repr__(self):
return "'{self.ad_url}'".format(self=self)
todaysdate = str(datetime.now().year) + '-' + str(datetime.now().month) + '-' + str(datetime.now().day)
unique_landingpages = session.query(LandingPages).filter(LandingPages.created_on.startswith(todaysdate)).limit(2).all()
class BetsySpider(scrapy.Spider):
name='BetsySpider'
start_urls = [unique_landingpages]
def parse(self, response):
url = response.url
title = response.css('h1::text').extract_first()
print('URL is: {}'.format(url))
如果我在设置unique\u landingpages变量之后添加此行:
print unique_landingpages
然后我看到了看似有用的结果:
['https://www.google.com', 'https://www.bing.com/']
但是,我没有成功地将这些结果传递到scrapy的start\u url参数。你知道吗
如果我尝试start\u url=unique\u landingpages,则会出现以下错误:
File "/Users/chris/Desktop/Banff Experiments/banff/lib/python2.7/site-packages/scrapy/http/request/init.py", line 56, in _set_url raise TypeError('Request url must be str or unicode, got %s:' % type(url).name)
TypeError: Request url must be str or unicode, got LandingPages:
如果我尝试start\u url=[unique\u landingpages],会出现以下错误:
File "/Users/chris/Desktop/Banff Experiments/banff/lib/python2.7/site-packages/scrapy/http/request/init.py", line 56, in _set_url raise TypeError('Request url must be str or unicode, got %s:' % type(url).name)
TypeError: Request url must be str or unicode, got list:
但是,当我在Mac终端上运行这个命令,然后复制print unique\u landingpages的输出,如上图所示,然后直接粘贴到贝西.py,所以它说:
start_urls = ['https://www.google.com', 'https://www.bing.com/']
它运行得非常好。你知道吗
我在这里搜索了十几篇文章,但没有看到其他人有同样的情况。谁能告诉我哪里出了问题吗?你知道吗
(顺便说一句,可能有一种更干净的方法可以按今天的日期过滤。)
您的查询正在返回两个
LandingPages
对象的实例。您可以更改查询以便只返回ad_url
值,也可以提取返回的每个LangingPages
实例的ad_url
属性。你知道吗方案1:
方案2:
如果您只需要每个记录的
ad_url
字段,请使用选项2,因为查询成本会更低。你知道吗print
语句具有误导性,因为您为LandingPages
类定义了一个__repr__
方法。print
查找该方法,并在试图找出如何打印所给内容时使用它。你知道吗相关问题 更多 >
编程相关推荐