Используя scrapy в среде Python 2, я хочу использовать sqlalchemy, чтобы запросить в базе данных список URL-адресов, а затем отправить этот список URL-адресов в scrapy, чтобы использовать его в качестве списка start_urls.
Имя файла - betsy.py, и я выполняю все это, набрав:
scrapy runspider 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 / Крис / Рабочий стол / Эксперименты Banff / banff / lib / python2.7 / site-packages / scrapy / http / request / init .py", строка 56, в _set_url
повысить TypeError ('URL-адрес запроса должен быть str или unicode, получен% s:'% type (url). name )
TypeError: URL-адрес запроса должен быть str или unicode, получил LandingPages:
Если я попробую start_urls = [unique_landingpages], я получу эту ошибку:
Файл "/ Users / Крис / Рабочий стол / Эксперименты Банфа / banff / lib / python2.7 / site-packages / scrapy / http / request / init .py", строка 56, в _set_url
повысить TypeError ('URL-адрес запроса должен быть str или unicode, получен% s:'% type (url). name )
TypeError: URL-адрес запроса должен быть str или unicode, полученный список:
Однако, когда я запускаю это в Mac Terminal, а затем копирую вывод print unique_landingpages , как показано выше, а затем непосредственно вставляю это в betsy.py, так что оно говорит:
start_urls = ['https://www.google.com', 'https://www.bing.com/']
работает отлично.
Я искал около дюжины статей здесь, но больше никого не вижу в такой же ситуации. Может кто-нибудь любезно пролить свет на то, где я ошибся?
(Кстати, возможно, есть более чистый способ фильтрации по сегодняшней дате.)