我尝试存储蜘蛛每次访问目标页面时访问的URL的踪迹。我在阅读每个请求的起始URL和结束URL时遇到了麻烦。我已经阅读了文档,这是我使用文档中的示例所能达到的最大程度。
这是我的蜘蛛类
class MinistryProductsSpider(CrawlSpider):
name = "ministryproducts"
allowed_domains = ["www.ministryofsupply.com"]
start_urls = ["https://www.ministryofsupply.com/"]
base_url = "https://www.ministryofsupply.com/"
rules = [
Rule(
LinkExtractor(allow="products/"),
callback="parse_products",
follow=True,
process_request="main",
)
]
我有一个单独的callback
函数,它解析每个产品页面上的数据。文档没有说明我是否可以在同一个Rule
中使用callback
和process_request
at。
def main(self, request, response):
trail = [link for link in response.url]
return Request(response.url, callback=self.parse_products, meta=dict(trail))
def parse_products(self, response, trail):
self.logger.info("Hi this is a product page %s", response.url)
parser = Parser()
item = parser.parse_product(response, trail)
yield item
在过去的4个小时里,我一直被困在这一点上。我的Parser
类运行得绝对正常。我也在寻找这种情况下最佳实践的解释。
1条答案
按热度按时间inb24sb21#
我通过迭代目录页面上
a
标签上的href
值来创建一个新的scrapy.request
对象,从而解决了这个问题。