在爬行monsterindia.com时,从刮擦的外壳中得到空的响应

时间:2019-04-12 16:35:54

标签: python scrapy web-crawler

我正在尝试从monsterindia.com抓取一些页面。但是,每当我在scrapy shell上编写任何xpath时,它都会给我空的结果。但是,应该有某种方法,因为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 个答案:

答案 0 :(得分:2)

您要查找的数据不在主页上,而是在页面加载后检索到的响应中。如果您在浏览器中选中“ 查看页面源”,则会看到第一个请求中的实际内容。

通过检查开发工具中的“网络”标签,您将看到更多请求,例如对此URL的请求:https://www.monsterindia.com/middleware/jobsearch?query=computer&sort=1&limit=25

答案 1 :(得分:1)

因此,我认为Thiago遇到的问题是该页面使用xhr请求进行更新,其中包括结果计数查询字符串参数。这将返回您可以解析的json。因此,您将网址更改为该网址并相应地处理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()