我认为我想问的是是否可以绕开sql:hide(https://docs.microsoft.com/en-us/sql/relational-databases/sqlxml-annotated-xsd-schemas-using/hiding-elements-and-attributes-by-using-sql-hide?view=sql-server-2017),但是如果我弄错了,我在下面描述了我的实际问题:
我正在尝试从具有类似以下内容的DOM的网站中抓取“ foo”网址:
<html>
<body>
<tbody>
<tr>
<a href="foo1">...</a>
<a href="foo2">...</a>
</tr>
</tbody>
<table>
<tbody>
<tr>
<a href="bar1">...</a>
</tr>
<tr>
<a href="bar2">...</a>
</tr>
</tbody>
</table>
</body>
</html>
每当我尝试print(response.css('a'))
或等效地print(response.xpath('//a'))
时,都可以看到“ foo”网址,但看不到“ bar”网址。另外,使用XPath我可以访问该表,但是print(response.xpath('//table//*'))
和print(response.xpath('//table//a'))
都输出[]
。
是否可能以某种方式对Scrapy隐藏了表格的元素?一个人怎么解决呢?
先谢谢了。这主要是出于兴趣,因为网址无论如何都具有可预测的模式。
答案 0 :(得分:0)
我知道这只是一个疯狂的猜测,但是您可以尝试
//a[starts-with(@href,'foo')]/text()
这应该为您提供所有具有a
属性的href
标签的文本值,该属性值以字符串'foo'开头。
但是有可能稍后在JavaScript中加载XML / HTML结果的某些部分,这将解释您查找某些元素时遇到的困难。