#python #scrapy #web-crawler
Вопрос:
Я новичок в скрэпи. В принципе, у меня есть несколько веб-страниц с идентичной структурой для обхода. Каждая веб-страница загружается динамически при прокрутке вниз, а запрос ajax выполнен в формате "https://example.org/ajax/unique_id_for_this_page/page=1/...."
. При достижении конца страницы что-то в ответе на запрос ajax пусто, поэтому я могу остановиться, чтобы отправить следующий запрос ajax. Как я могу достичь этой цели с помощью scrapy? Вот код, который я использую.
class WebSpider(Spider):
base_url = 'https://example.org/ajax/{}/page={}/...'
def start_requests(self):
# unique_id for different web pages required to crawl
unique_ids = ['webpage01', 'webpage02', 'webpage03', ...]
urls = [base_url.format(unique_id, 1) for unique_id in unique_ids]
for url in urls:
# send the 1st page's ajax requests of 3 web pages required to crawl
yield Requests(url, callback=self.parse)
def parse(self, response):
# parse the response and decide if sending the next ajax request
res = json.loads(response.text)
if res['data']['list']:
# the list is not empty, save results and go to next
save_results_to_item()
current_page_num = re.search(r'page=(d )', response.url).group(1)
next_page_num = int(current_page_num) 1
# generate the next ajax request
next_page_url = response.url.replace(f'page={current_page_num}', f'page={next_page_num}')
yield Requests(next_page_url, self.parse)
Сможет ли приведенный выше код сканировать все веб-страницы и прекратить отправку новых ajax-запросов для определенной веб-страницы, когда res['data']['list']
она пуста? Мне трудно понять, сработало ли это. Или есть какое-то лучшее решение? Спасибо за любой совет!
Комментарии:
1. По — моему, выглядит неплохо. Кстати, вместо этого вы можете использовать » res = response.json ()».