我試圖存盤我的蜘蛛每次訪問目標頁面時訪問的 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決議每個產品頁面上的資料。該檔案沒有指定我是否可以在callback同一.process_requestRule
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課運行得非常好。在這種情況下,我也在尋找對最佳實踐的解釋。
uj5u.com熱心網友回復:
scrapy.request我通過迭代目錄頁面上標簽上的href值來創建一個新物件,從而解決了這個問題。a
parser = Parser()
def main(self, response):
href_list = response.css("a.CardProduct__link::attr(href)").getall()
for link in href_list:
product_url = self.base_url link
request = Request(product_url, callback=self.parse_products)
visited_urls = [request.meta.get("link_text", "").strip(), request.url]
trail = copy.deepcopy(response.meta.get("visited_urls", [])) visited_urls
request.meta["trail"] = trail
yield request
def parse_products(self, response):
self.logger.info("Hi this is a product page %s", response.url)
item = self.parser.parse_product(response)
yield item
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/493895.html
標籤:Python python-3.x 网页抓取 网址 刮擦
