【发布时间】:2023-03-05 19:19:01
【问题描述】:
在 Python 2 环境中使用 scrapy,我想使用 sqlalchemy 查询数据库以获取 URL 列表,然后将该 URL 列表发送到 scrapy,用作它的 start_urls 列表。
文件名是 betsy.py,我通过键入以下内容来执行整个事件:
scrapy runpider betsy.py
这应该是一个相当简单的程序来仔细检查 404 等。一旦我到达这些 URL,我就不需要做任何进一步的抓取。
以下是我认为的相关代码:
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_landingpages 变量之后添加此行:
print unique_landingpages
然后我看到了看似可用的结果:
['https://www.google.com', 'https://www.bing.com/']
但是,我没有成功将这些结果传递给 scrapy 的 start_urls 参数。
如果我尝试 start_urls = unique_landingpages,我会收到此错误:
文件“/Users/chris/Desktop/Banff Experiments/banff/lib/python2.7/site-packages/scrapy/http/request/init.py”,第 56 行,在 _set_url raise TypeError('请求的 url 必须是 str 或 unicode,得到 %s:' % type(url).name)
TypeError: Request url must be str or unicode, got LandingPages:
如果我尝试 start_urls = [unique_landingpages],我会收到以下错误:
文件“/Users/chris/Desktop/Banff Experiments/banff/lib/python2.7/site-packages/scrapy/http/request/init.py”,第 56 行,在 _set_url raise TypeError('请求的 url 必须是 str 或 unicode,得到 %s:' % type(url).name)
TypeError: Request url must be str or unicode, got list:
但是,当我在 Mac 终端中运行它,然后复制 print unique_landingpages 的输出,如上所示,然后直接将其粘贴到 betsy.py 中,这样它就会显示:
start_urls = ['https://www.google.com', 'https://www.bing.com/']
它运行得很好。
我在这里搜索了十几篇文章,但没有看到其他人有同样的情况。谁能帮我解释一下我哪里出错了?
(顺便说一句,可能有一种更简洁的方式来过滤今天的日期。)
【问题讨论】:
标签: python sqlalchemy scrapy