来自 python 脚本进程的 Scrapy 运行 仅启动 url
Scrapy running from python script processes only start url
我写了一个Scrapy CrawlSpider。
class SiteCrawlerSpider(CrawlSpider):
name = 'site_crawler'
def __init__(self, start_url, **kw):
super(SiteCrawlerSpider, self).__init__(**kw)
self.rules = (
Rule(LinkExtractor(allow=()), callback='parse_start_url', follow=True),
)
self.start_urls = [start_url]
self.allowed_domains = tldextract.extract(start_url).registered_domain
def parse_start_url(self, response):
external_links = LinkExtractor(allow=(), deny=self.allowed_domains).extract_links(response)
for link in external_links:
i = FastcrawlerItem()
i['pageurl'] = response.url
i['ext_link'] = link.url
i['ext_domain'] = tldextract.extract(link.url).registered_domain
yield i
现在我正尝试从另一个 Python 脚本 运行 此脚本,如下所示:
from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy import log, signals
from scrapy_fastcrawler.spiders.site_crawler import SiteCrawlerSpider
from scrapy.utils.project import get_project_settings
spider = SiteCrawlerSpider(start_url='http://www.health.com/')
settings = get_project_settings()
crawler = Crawler(settings)
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run()
问题:一切 运行 都很好,但这里的主要问题是脚本仅处理 'start_url' 并停止。它不会抓取并移动到在开始 url 上找到的其他链接,并且不会进行任何处理。我还设置了管道,start_url 中的项目已正确保存到管道设置中。
非常感谢任何帮助。
当您覆盖爬网蜘蛛的默认值 parse_start_url
时,该方法必须生成 Request
以供蜘蛛跟随,否则它哪儿也去不了。
子类化时不需要实现此方法 CrawlSpider
,从代码的其余部分来看,您似乎真的不想;尝试将您定义的方法更改为 parse_page
之类的方法(只是不要将其称为 parse
)。
我写了一个Scrapy CrawlSpider。
class SiteCrawlerSpider(CrawlSpider):
name = 'site_crawler'
def __init__(self, start_url, **kw):
super(SiteCrawlerSpider, self).__init__(**kw)
self.rules = (
Rule(LinkExtractor(allow=()), callback='parse_start_url', follow=True),
)
self.start_urls = [start_url]
self.allowed_domains = tldextract.extract(start_url).registered_domain
def parse_start_url(self, response):
external_links = LinkExtractor(allow=(), deny=self.allowed_domains).extract_links(response)
for link in external_links:
i = FastcrawlerItem()
i['pageurl'] = response.url
i['ext_link'] = link.url
i['ext_domain'] = tldextract.extract(link.url).registered_domain
yield i
现在我正尝试从另一个 Python 脚本 运行 此脚本,如下所示:
from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy import log, signals
from scrapy_fastcrawler.spiders.site_crawler import SiteCrawlerSpider
from scrapy.utils.project import get_project_settings
spider = SiteCrawlerSpider(start_url='http://www.health.com/')
settings = get_project_settings()
crawler = Crawler(settings)
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run()
问题:一切 运行 都很好,但这里的主要问题是脚本仅处理 'start_url' 并停止。它不会抓取并移动到在开始 url 上找到的其他链接,并且不会进行任何处理。我还设置了管道,start_url 中的项目已正确保存到管道设置中。
非常感谢任何帮助。
当您覆盖爬网蜘蛛的默认值 parse_start_url
时,该方法必须生成 Request
以供蜘蛛跟随,否则它哪儿也去不了。
子类化时不需要实现此方法 CrawlSpider
,从代码的其余部分来看,您似乎真的不想;尝试将您定义的方法更改为 parse_page
之类的方法(只是不要将其称为 parse
)。