我正在尝试提取文本
来自网站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生成的。所以我什么都不知道能解决这个问题。
请协助!
谢谢。
答案 0 :(得分:1)
您所需的信息由Javascript呈现,但在页面内也可以JSON格式提供。您需要做的就是选择包含数据的元素,使用JSON lib解析数据并访问所需的字段。
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
之类的东西。