Maison > Questions et réponses > le corps du texte
<img class="js-refreshCaptcha captcha" width="120" height="30" data-tip="s$t$看不清楚?换一张" alt="验证码" src="/captcha.gif?r=1462431202340&type=login" style="display: block;">
这个字段的src属性如何用xpath选择?
我的写法是:
captcha_url = response.xpath('/html/body/p[1]/p/p[2]/p[2]/form/p[1]/p[3]/p/img/@src').extract()
中间的xpath是从chrome直接copy的
但是无法显示出src属性,最后弹出的是[]
不知道哪里有问题、
另外如果知道css选择器怎么写的,也可以告知一下,我看到class中有空格,不知道如何选择.
我的写法是:
captcha_url = response.css('.js-refreshCaptcha .captcha::attr(src)').extract()
从Scrapy命令行中一步步测试得到,是不是因为是JS动态生成的原因?才会导致@src属性无法获取?
迷茫2017-04-17 17:43:53
Que voulez-vous faire, filtrer le code HTML capturé ? Vous pouvez envisager une recherche régulière
大家讲道理2017-04-17 17:43:53
Chrome dispose d'un outil appelé xpath-helper, qui peut être téléchargé depuis l'App Store. Vous pouvez utiliser cet outil pour vérifier si votre syntaxe XPath est correcte.
De plus, si la syntaxe est correcte mais ne peut pas être extraite dans le programme, alors il faut considérer que la page web d'origine est une page dynamique et doit être analysée par jsjs.
PHPz2017-04-17 17:43:53
Le navigateur dispose d'un mécanisme de tolérance aux pannes et corrigera les balises HTML non standard, de sorte que la structure de page que vous voyez dans la console peut être différente de la structure de page que vous demandez à l'aide du code.
Solution :
Perdez la portée du sélecteur
Utilisez la classe pour localiser
Les points d'arrêt dans le code et exécutez en une seule étape pour localiser la règle XPath de cette balise
黄舟2017-04-17 17:43:53
J'utilise habituellement bs4, qui est une solution stupide. Vous pouvez également utiliser des règles régulières, mais c'est casse-tête
.img_tag = soup.find('img', attrs=dict(class="js-refreshCaptcha captcha") )
img_tag_src = img_tag['src']
大家讲道理2017-04-17 17:43:53
captchaUrl = ''.join(response.xpath("//img[@class='js-refreshCaptcha captcha']/@src").extract())