繁体   English   中英

Scrapy Spider 类函数调用

[英]Scrapy Spider class function call

我正在尝试抓取大学网站以获取有关课程信息的所有信息。 但是在我的蜘蛛中, parse_course方法似乎不是世界,因为它不会产生或打印任何东西。

import scrapy
from ..items import UniversityItem

class DuneSpider(scrapy.Spider):
    name = 'Dune'
    allowed_domains = ['https://www.dundee.ac.uk/']
    start_urls = ['https://www.dundee.ac.uk/undergraduate/courses']

def parse(self, response):
    courses = response.css(".filterable-list a::attr(href)").extract()
    courses_length = len(courses)

    for course in range(courses_length):
        courses[course] = "https://www.dundee.ac.uk" + courses[course]

    print("THE COURSE LINK:\n", courses[1:10])

    for course_url in courses:
        print("COURSE URL:", course_url)
        yield scrapy.Request(course_url, callback=self.parse_course)

def parse_course(self, response):
    print("IN PARSE COURSE: ", response.url)
    item = UniversityItem()
    course_name = response.xpath("//h1[@class='hero__title']/text()").extract()
    item['course_name'] = course_name
    print(course_name)
    yield item['course_name']

改变这个:

allowed_domains = ['www.dundee.ac.uk']

并且您必须产生item而不是list ,需要更改:

 yield item['course_name']

到:

 yield item

print使用标准输出,默认情况下不会在scrapy log 中捕获。 您可以在settings.py启用LOG_STDOUT = true

更好的解决方案是使用Spider.logger

class DuneSpider(scrapy.Spider):
    ...

    def parse_course(self, response):
        self.logger.info("IN PARSE COURSE: ", response.url)
        ...

更新:我错过了一些东西。 @Roman 是对的,要处理 ItemPipeline 中的项目,您应该生成Item的实例,而不是Item某些属性。

scrapy 命令的输出显示了多个地方的错误:

2020-09-15 07:43:23 [py.warnings] WARNING: c:\program files\python37\lib\site-packages\scrapy\spidermiddlewares\offsite.py:61: URLWarning: allowed_domains accepts only domains, not URLs. Ignoring URL entry https://www.dundee.ac.uk/ in allowed_domains.
  warnings.warn(message, URLWarning)

2020-09-15 07:43:23 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2020-09-15 07:43:23 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.dundee.ac.uk/undergraduate/courses> (referer: None)
2020-09-15 07:43:24 [scrapy.spidermiddlewares.offsite] DEBUG: Filtered offsite request to 'www.dundee.ac.uk': <GET https://www.dundee.ac.uk/undergraduate/accountancy-mathematics>

'offsite/domains': 1,
'offsite/filtered': 229,

您的链接被检测为异地,因为您的allowed_domains是错误的。 顾名思义,它应该是一个域名列表,而不是一个 URL 列表。

allowed_domains更改为['www.dundee.ac.uk']解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM