# -*- coding: utf-8 -*-
import scrapy
from urllib.parse import unquote, quote
class md3(scrapy.Spider):
name = "md3"
allowed_domains = ["mawdoo3.com"]
start_urls = ["https://mawdoo3.com"]
def parse(self, response):
for listing in response.css("ul.category-items > li"):
lister = {}
namelist = listing.css("a::text").extract_first()
for i in range(1, 8):
listurl = "https://mawdoo3.com/index.php?action=ajax&rs=JsonCategories&rsargs[]="+str(i)+"&rsargs[]="+str(namelist.replace(" ", "_"))
lister['listurl'] = listurl
yield scrapy.Request(url=listurl, callback=self.parseresponse, meta={"lister": lister})
def parseresponse(self, response):
response.meta.get("lister")['responseurl'] = unquote(response.url)
yield response.meta.get("lister")
этот паук должен получать данные по ссылке, такой как
https://mawdoo3.com/index.php?action=ajax&rs=JsonCategories&rsargs[]=1&rsargs[]=منوعات_عن_الطبيعة
, но в значении lister я получаю
[
{
"listurl" = "https://mawdoo3.com/index.php?action=ajax&rs=JsonCategories&rsargs[]=2&rsargs[]=منوعات_عن_الطبيعة",
"responseurl" = "https://mawdoo3.com/index.php?action=ajax&rs=JsonCategories&rsargs[]=1&rsargs[]=%D8%B2%D8%B1%D8%A7%D8%B9%D8%A9_%D8%A7%D9%84%D8%AE%D8%B6%D8%B1%D8%A7%D9%88%D8%A7%D8%AA_%D9%88%D8%A7%D9%84%D9%81%D9%88%D8%A7%D9%83%D9%87"
}
]
при декодировании rsargs [1] становится совершенно другим именем, чем listurl и rsargs [0] - это другое число, а если его повторить, responseurl всегда случайный и более случайный, если увеличить диапазон (1, 3)
в чем проблема с пауком?
что я хочу получитьте же самые результаты в listurl и responseurl , потому что я отправил listurl в вызове функции def parseresponse
, но responseurl , который предполагаетсяне будет listurl совершенно другой.