Мне нужно было бы очистить все обзоры продукта на Amazon:
https://www.amazon.com/Cascade-ActionPacs-Dishwasher-Detergent-Packaging/dp/B01NGTV4J5/ref=pd_rhf_cr_s_trq_bnd_0_6 / 130-6831149-4603948? _Encoding = UTF8 & pd_rd_i = B01NGTV4J5 & pd_rd_r = b6f87690-19d7-4dba-85c0- b8f54076705a & pd_rd_w = AgonG & pd_rd_wg = GG9yY & pf_rd_p = 4e0a494a-50c5-45f5-846a-abfb3d21ab34 & pf_rd_r = QAD0984X543 ** RFMNNPNF2 *. Однако похоже, что следующий код не очищает все обзоры, поскольку они разделены на n разных страниц. Человек должен сначала щелкнуть все отзывы, а затем щелкнуть на следующей странице. Мне интересно, как я могу сделать это с помощью scrapy или другого инструмента в python. Есть 5893 отзыва об этом продукте, и я не могу получить эту информацию вручную.
В настоящее время мой код следующий:
import scrapy from scrapy.crawler import CrawlerProcess class My_Spider(scrapy.Spider): name = 'spid' start_urls = ['https://www.amazon.com/Cascade-ActionPacs-Dishwasher-Detergent-Packaging/dp/B01NGTV4J5/ref=pd_rhf_cr_s_trq_bnd_0_6/130-6831149-4603948?_encoding=UTF8&pd_rd_i=B01NGTV4J5&pd_rd_r=b6f87690-19d7-4dba-85c0-b8f54076705a&pd_rd_w=AgonG&pd_rd_wg=GG9yY&pf_rd_p=4e0a494a-50c5-45f5-846a-abfb3d21ab34&pf_rd_r=QAD0984X543RFMNNPNF2&psc=1&refRID=QAD0984X543RFMNNPNF2'] def parse(self, response): for row in response.css('div.review'): item = {} item['author'] = row.css('span.a-profile-name::text').extract_first() rating = row.css('i.review-rating > span::text').extract_first().strip().split(' ')[0] item['rating'] = int(float(rating.strip().replace(',', '.'))) item['title'] = row.css('span.review-title > span::text').extract_first() yield item
И для выполнения краулера:
process = CrawlerProcess({ }) process.crawl(My_Spider) process.start()
Подскажите, можно ли перейти на следующие страницы и очистить все обзоры? Это должна быть страница, на которой хранятся отзывы.
С URL https://www.amazon.com/Cascade-ActionPacs-Dishwasher-Detergent-Packaging/product-reviews/B01NGTV4J5/ref=cm_cr_arp_d_paging_btm_next_2?ie=UTF8&reviewerType=all_reviews&pageNumber=<PUT PAGE NUMBER HERE> вы можете сделать что-то вроде этого:
https://www.amazon.com/Cascade-ActionPacs-Dishwasher-Detergent-Packaging/product-reviews/B01NGTV4J5/ref=cm_cr_arp_d_paging_btm_next_2?ie=UTF8&reviewerType=all_reviews&pageNumber=<PUT PAGE NUMBER HERE>
import scrapy from scrapy.crawler import CrawlerProcess class My_Spider(scrapy.Spider): name = 'spid' start_urls = ['https://www.amazon.com/Cascade-ActionPacs-Dishwasher-Detergent-Packaging/product-reviews/B01NGTV4J5/ref=cm_cr_arp_d_paging_btm_next_2?ie=UTF8&reviewerType=all_reviews&pageNumber=1'] def parse(self, response) for row in response.css('div.review'): item = {} item['author'] = row.css('span.a-profile-name::text').extract_first() rating = row.css('i.review-rating > span::text').extract_first().strip().split(' ')[0] item['rating'] = int(float(rating.strip().replace(',', '.'))) item['title'] = row.css('span.review-title > span::text').extract_first() yield item next_page = response.css('ul.a-pagination > li.a-last > a::attr(href)').get() yield scrapy.Request(url=next_page))