Вопросы о гусеничном шасси python и scrapy - PullRequest
0 голосов
/ 05 апреля 2020

Мне поручили создать сканер, используя python и scrapy, чтобы получить отзывы о конкретном c отеле. Я прочитал множество учебных пособий и руководств, но мой код продолжает генерировать пустой CSV-файл.

Item.py

import scrapy


class AgodaItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    StarRating = scrapy.Field()
    Title = scrapy.Field()
    Comments = scrapy.Field()

Agoda_reviews.py

import scrapy


class AgodaReviewsSpider(scrapy.Spider):
    name = 'agoda_reviews'
    allowed_domains = ['agoda.com']
    start_urls = ['https://www.agoda.com/holiday-inn-express-kuala-lumpur-city-centre/hotel/kuala-lumpur-my.html?checkIn=2020-04-14&los=1&adults=2&rooms=1&searchrequestid=41af11cc-eaa6-42cc-874d-383761d3523c&travellerType=1&tspTypes=9']

    def parse(self, response):
        StarRating=response.xpath('//span[@class="Review-comment-leftScore"]/span/text()').extract()
        Title=response.xpath('//span[@class="Review-comment-bodyTitle"]/span/text()').extract()
        Comments=response.xpath('//span[@class="Review-comment-bodyText"]/span/text()').extract()
        count = 0

        for item in zip(StarRating, Title, Comments):
            # create a dictionary to store the scraped info
            scraped_data = {
                'StarRating': item[0],
                'Title': item[1],
                'Comments': item[2],
            }

            # yield or give the scraped info to scrapy
            yield scraped_data

Может кто-нибудь, пожалуйста, дайте мне знать, где проблемы? Я совершенно невежественен ...

1 Ответ

0 голосов
/ 06 апреля 2020

Ваши результаты пусты, потому что Scrapy получает ответ, который не имеет большого содержания. Это можно увидеть, запустив оболочку scrapy из своего терминала и отправив запрос на страницу, которую вы пытаетесь сканировать.

scrapy shell 'https://www.agoda.com/holiday-
inn-express-kuala-lumpur-city-centre/hotel/kuala-lumpur-my.html?checkIn=2020-04-14&los=1&adults=2&rooms=1&searchrequestid=41af11cc
-eaa6-42cc-874d-383761d3523c&travellerType=1&tspTypes=9'

Затем вы можете просмотреть ответ, полученный scrapy, запустив: view(response) That должен открыть ответ, полученный и сохраненный scrapy в вашем браузере. Как вы должны видеть, нет отзывов для извлечения.

Кроме того, поскольку вы пытаетесь извлечь некоторую информацию из span-элементов, вы можете запустить response.css('span').extract(), и вы увидите, что есть некоторые span- элементы в ответе, но ни один из них не имеет класса, который имеет какое-либо отношение к Reviews.

Итак, чтобы подвести итог, agoda отправляет вам совершенно пустой ответ. Как следствие скрапинг извлекает пустые списки. Возможные причины: Agoda выяснила, что вы пытаетесь сканировать их веб-сайт, например, на основе вашего пользовательского агента, и поэтому скрывает контент от вас - или они используют javascript для генерации контента.

Чтобы решить вашу проблему, вы должны либо использовать agoda api, либо ознакомиться со спуфингом пользовательского агента, либо проверить пакет селеном, который может помочь с javascript -высокими веб-сайтами.

...