Я пытаюсь сделать веб-скребок, но не могу получить ссылку на следующей странице. Я пробовал некоторые комбинации, но ни одна из них не работает. Учебник на scrapy.org имеет более простой формат, поэтому он не решает мою проблему
Сайт, который я собираю, имеет следующий макет:
<nav class="nav_class"> <a class="class_1" href="1.html"> <a class="class_2" href="2.html"> <a class="class_3" href="3.html">
Я хочу получить ссылку 3.html, используя селекторы css
import scrapy class MySpider(scrapy.Spider): name = "flip_spider" def start_requests(self): urls = [ "https://www.flipkart.com/mobiles/pr?sid=tyy%2C4io&p%5B%5D=facets.processor_brand%255B%255D%3DSnapdragon&p%5B%5D=facets.serviceability%5B%5D%3Dfalse&p%5B%5D=facets.offer_type%255B%255D%3DExchange%2BOffer&otracker=clp_banner_1_10.bannerX3.BANNER_mobile-phones-store_HPUGCU9BYBF6&fm=neo%2Fmerchandising&iid=M_934db066-154e-4074-a4b1-96f56a0af28e_6.HPUGCU9BYBF6&ppt=HomePage&ppn=Home&ssid=85m4yqvgzk0000001558978084715&page=1", ] for url in urls: yield scrapy.Request(url, callback=self.parse) def parse(self, response): # page_id=response.url.split("=")[-1] phone_details = response.css("div._1-2Iqu.row") for ph in phone_details: phone = ph.css("div._3wU53n::text").get() rating = ph.css("div.hGSR34::text").get() price = ph.css("div._1vC4OE._2rQ-NK::text").get() yield{ "name": phone, "rating": rating, "price": price, } final = "https://www.flipkart.com/mobiles/pr?sid=tyy%2C4io&p%5B%5D=facets.processor_brand%255B%255D%3DSnapdragon&p%5B%5D=facets.serviceability%5B%5D%3Dfalse&p%5B%5D=facets.offer_type%255B%255D%3DExchange%2BOffer&otracker=clp_banner_1_10.bannerX3.BANNER_mobile-phones-store_HPUGCU9BYBF6&fm=neo%2Fmerchandising&iid=M_934db066-154e-4074-a4b1-96f56a0af28e_6.HPUGCU9BYBF6&ppt=HomePage&ppn=Home&ssid=85m4yqvgzk0000001558978084715&page=6" next_page_id = response.css("nav._1ypTlJ a._3fVaIS::attr(href)").get() # ^This is the line I need help with if next_page_id is not final: next_page = response.urljoin(next_page_id) yield scrapy.Request(next_page, callback=self.parse)
Он только очищает первую страницу и затем останавливается
Измените свой код на это, и он будет работать
next_page_id = response.css("nav._1ypTlJ a._3fVaIS::attr(href)").get() if next_page_id: next_page = response.urljoin(next_page_id) yield scrapy.Request(next_page, callback=self.parse)