[英]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.