Получение пустого ответа от скорлупы при сканировании monsterindia.com - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь отсканировать несколько страниц с сайта monsterindia.com.Но всякий раз, когда я пишу какой-либо xpath на scrapy shell, он дает пустой результат.Однако должен быть какой-то путь, потому что команда view (response) дает мне ту же HTML-страницу.

Я запустил эту команду:

scrapy shell "https://www.monsterindia.com/search/computer-jobs"

на своем терминале, а затем попытался несколькими способами сформулировать различные xpath, такие как - response.xpath('//*[@class="job-tittle"]/text()').extract().Но не повезло .. всегда есть пустой результат.

на терминале:

scrapy shell "https://www.monsterindia.com/search/computer-jobs"

затем response.xpath('//div[@class="job-tittle"]/text()').extract() получил пустой результат.

затем, response.xpath('//*[@class="card-apply-content"]/text()').extract() получил пустой результат.

Я ожидаюЭто дать некоторые результаты, я имею в виду текст с сайта после сканирования.Пожалуйста, помогите мне с этим. enter image description here

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

Данные, которые вы ищете, находятся не на главной странице, а в ответах, полученных после загрузки страницы. Если вы отметите « Просмотр страницы источника » в своем браузере, вы увидите, что фактически пришло в первом запросе.

И, просмотрев вкладку сети в инструментах разработчика, вы увидите дальнейшие запросы, например, к этому URL: https://www.monsterindia.com/middleware/jobsearch?query=computer&sort=1&limit=25

1 голос
/ 12 апреля 2019

Так что, как мне кажется, Тиаго достиг того, что страница обновляется запросами xhr, которые включают параметр строки запроса количества результатов. Это возвращает JSON вы можете разобрать. Таким образом, вы изменяете свой URL на это и соответственно обрабатываете json.

Использование запросов для демонстрации

import requests
from bs4 import BeautifulSoup as bs
import json

r = requests.get('https://www.monsterindia.com/middleware/jobsearch?query=computer&sort=1&limit=100')
soup = bs(r.content, 'lxml')
data = json.loads(soup.select_one('p').text)['jobSearchResponse']['data']

for item in data:
    print(item)

JSON первого элемента

https://jsoneditoronline.org/?id=fe49c53efe10423a8d49f9b5bdf4eb36


С помощью скрапа:

jsonres = json.loads(response.body_as_unicode()
...