y草,无法在网站中找到文本阶段

时间:2019-06-02 17:35:51

标签: python parsing scrapy

我正在尝试提取文本

来自网站A的

60天 https://www.vitalsource.com/products/abnormal-psychology-susan-nolen-hoeksema-v9781259765667

B网站上的

终身访问 https://www.vitalsource.com/products/teaming-with-nutrients-jeff-lowenfels-v9781604695175

我尝试使用abs xpath,但均不返回任何内容。

A

//div[2]/div[1]/label[1] 

对于B

//div[1]/span[1]/label[1] 

也没有CSS路径

.u-weight--bold.type--magic9.u-inline

我相信我要提取的文本不是由javascript生成的。所以我什么都不知道能解决这个问题。

请协助!

谢谢。

2 个答案:

答案 0 :(得分:1)

您所需的信息由Javascript呈现,但在页面内也可以JSON格式提供。您需要做的就是选择包含数据的元素,使用JSON lib解析数据并访问所需的字段。

enter image description here

import json
import pprint

data = response.xpath(
    '//div[@data-react-class="vs.CurrentRegionOnlyWarningModal"]'
    '/@data-react-props')
.extract_first()

json_data = json.loads(data)

pprint.pprint(json_data)
{'selectedVariant': None,
 'variants': [{'asset_id': 88677112,
               'created_at': '2016-10-07T14:17:10.000Z',
               'deleted_at': None,
               'distributable': True,
               'downloadable_duration': 'perpetual',
               'full_base_currency': 'USD',
               'full_base_price': '107.5',
               'full_currency': 'USD',
               'full_price': '107.5',
               'full_price_converted': False,
               'id': 476831514,
               'import_id': 'a3b99a3de0df7d0442253798cba8b8ea',
               'in_store': True,
               'item_type': 'Single',
               ....
               'online_duration': '60 days',      

因此,您可以正常访问它:

for x in json_data['variants']:
    print(x['online_duration'])

重要的是要注意,此站点对每种产品都有一些变体,并且有更多具有相同字符串的字段。您必须了解该站点如何组织产品以获取正确的数据,但是这种方法应该足以访问所需的所有信息。

答案 1 :(得分:0)

不幸的是,它是由javascript生成的。因此,您很可能需要使用selenium之类的东西。