有必要繞過這個站點的所有位置mkm 如果我理解正確,地理位置是通過 url 中的 ID 引數(https://mkm-metal.ru/?REGION_ID=141)和 cookie 中的 ID 引數(' BITRIX_SM_CITY_ID':loc_id)。
import scrapy
import re
class Mkm(scrapy.Spider):
name = 'mkm'
def start_requests(self, **cb_kwargs):
for loc_id in ['142', '8', '12', '96']:
url = f"https://mkm-metal.ru/?REGION_ID={loc_id}"
cb_kwargs['cookies'] = {'BITRIX_SM_CITY_ID': loc_id}
yield scrapy.Request(
url=url,
callback=self.parse,
# meta={'cookiejar': loc_id},
cookies=cb_kwargs['cookies'],
cb_kwargs=cb_kwargs,
)
def parse(self, response, **cb_kwargs):
yield scrapy.Request(
url='https://mkm-metal.ru/catalog/',
callback=self.parse_2,
# meta={'cookiejar': response.meta['cookiejar']},
cookies=cb_kwargs['cookies'],
)
def parse_2(self, response, **cb_kwargs):
city = response.css('a.place span::text').get().strip()
print(city, response.url)
但就我而言,parse_2 方法只回傳一個城市(第一個 ID = 142)。怎么了?錯誤在哪里?
這是日志...
2022-06-05 17:32:46 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://mkm-metal.ru/?REGION_ID=142> (referer: None)
2022-06-05 17:32:46 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://mkm-metal.ru/?REGION_ID=8> (referer: None)
2022-06-05 17:32:46 [scrapy.dupefilters] DEBUG: Filtered duplicate request: <GET https://mkm-metal.ru/catalog/> - no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates)
2022-06-05 17:32:46 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://mkm-metal.ru/catalog/> (referer: https://mkm-metal.ru/?REGION_ID=142)
Бугульма https://mkm-metal.ru/catalog/
2022-06-05 17:32:47 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://mkm-metal.ru/?REGION_ID=12> (referer: None)
2022-06-05 17:32:47 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://mkm-metal.ru/?REGION_ID=96> (referer: None)
2022-06-05 17:32:47 [scrapy.core.engine] INFO: Closing spider (finished)
uj5u.com熱心網友回復:
在函式parse中,您為每個 cookie 請求相同的 url。Scrapy 過濾重復的請求,所以你只得到第一個請求,其余的被忽略。添加dont_filter=True:
import scrapy
import re
class Mkm(scrapy.Spider):
name = 'mkm'
def start_requests(self, **cb_kwargs):
for loc_id in ['142', '8', '12', '96']:
url = f"https://mkm-metal.ru/?REGION_ID={loc_id}"
cb_kwargs['cookies'] = {'BITRIX_SM_CITY_ID': loc_id}
yield scrapy.Request(
url=url,
callback=self.parse,
# meta={'cookiejar': loc_id},
cookies=cb_kwargs['cookies'],
cb_kwargs=cb_kwargs,
)
def parse(self, response, **cb_kwargs):
yield scrapy.Request(
url='https://mkm-metal.ru/catalog/',
callback=self.parse_2,
# meta={'cookiejar': response.meta['cookiejar']},
cookies=cb_kwargs['cookies'],
dont_filter=True
)
def parse_2(self, response, **cb_kwargs):
city = response.css('a.place span::text').get().strip()
print(city, response.url)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/486857.html
