更新:此号码48显示在" Inspect"在Chrome中,但不在"查看页面来源"。现在明白它是由JavaScript生成的,这就是我无法提取它的原因。
这是我试图抓取的HTML的一部分
<span class="value">
<span class="base-entity-display-count">48</span>
"times"
</span>
问题是我无法得到这个48号码 我认为这个问题是因为没有&#34;&#34;大约48. 因为我可以得到&#34;次&#34;没有问题的文字,我能看到的唯一区别是没有&#34;&#34;大约48岁。
这是适用于&#34;时代&#34;:
的代码response.xpath('.//span[@class="value"]/text()').extract_first()
>>> u'<span class="value"><span class="base-entity-display-count"></span>times</span>'
对于48:
response.xpath('.//span[@class="base-entity-display-count"]').extract_first()
>>> u'<span class="base-entity-display-count"></span>'
如您所见,48缺失。
有人有解决方案或想法吗?
答案 0 :(得分:3)
如果您查看页面正文并搜索您的号码,您可以看到有一些嵌入的json。
要解决此问题,您可以:
使用正则表达式查找嵌入的json:
import re
# select everything between "ap.boot.push(" and ");"
data = re.findall('app.boot.push\((\{.+?\})\);', response.body_as_unicode())
加载json并使用python解析它以找到所需的值:
import json
data = [json.loads(d) for d in data]
for d in data:
if d.get('name') == 'BaseEntityDetails':
print(d['values']['displayCountText'])
#prints: 66