如何找到一个非常深层嵌套的A HREF让我的蜘蛛找到NEXT按钮?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何找到一个非常深层嵌套的A HREF让我的蜘蛛找到NEXT按钮?相关的知识,希望对你有一定的参考价值。
我正在制作我的第二只蜘蛛,我发现这个特殊的结构对我来说非常复杂,我希望你能帮助我。
我有这个html页面(请注意,所有不必要的数据都被删除,我只留下了我感兴趣的链接:
<html>
<head>
</head>
<body>
<form>
<div>
</div>
<script>
</script>
<div>
</div>
<script>
</script>
<div>
<div>
</div>
<div>
<div>
<div>
</div>
<div>
</div>
<div>
<div>
</div>
<div>
<div>
</div>
<div>
</div>
<div>
<div>
<div>
<div>
</div>
<div>
<div>
<script>
</script>
<div>
<p></p>
<div></div>
<script></script>
<div></div>
<script></script>
<div></div>
<script></script>
<div></div>
<script></script>
<div></div>
<script></script>
<div></div>
<script></script>
<div></div>
<script></script>
<div></div>
<script></script> <div></div>
<script></script>
<div></div>
<script></script>
<div></div>
<script></script>
<div></div>
<script></script>
<div></div>
<script></script>
<table class="pageTable">
<tr>
<td></td>
<td>
<span></span>
<span></span>
<span></span>
<a href></a>
<a href></a>
<a href></a>
<a href></a>
<a href></a>
<a href></a>
<a href></a>
<a href></a>
<a href></a>
<a href="whatever.com" class="wx4">next</a>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
</body>
</html>
(这是实际结构)。
现在,特别是我的需要是我的蜘蛛遵循该链接(在表格内,在3个跨度之后和9个A标签之后)。所有其余的提取逻辑都已完成。
具有讽刺意味的是,除了表和我感兴趣之外,没有一个标签有任何类或id。但是由于一些奇怪的原因,当我尝试使用scrapy访问它时,我得到以下结果:
>>> response.css('a.wx4').extract()
[]
>>>
你知道我能做错什么吗?是因为它在<td>里面还有一堆<a>,嵌套在<tr>,<table>,很多<div>和一个<form>?
谢谢!
答案
这个XPath将找到最后一个锚元素:
response.selector.xpath('//a[last()]').extract()
你也可以用课来限定它
response.selector.xpath('//a[@class='wx4']').extract()
如果那个班级可能不止一个,那就抓住最后一个:
response.selector.xpath('//a[@class='wx4'][last()]').extract()
另一答案
//a[@class='wx4' and text()='next']
这将搜索使用类“wx4”设置样式且其文本为“next”的链接。
另一答案
也许你应该检查网页,看看它是否必须首先被泼溅:
scrapy shell your_url
response.body
检查它是否与您从浏览器获得的源代码一致。如果没有,请使用scrapinghub / splash。首先下载并配置docker,然后执行:
pip install scrapy_splash
sudo docker pull scrapinghub/splash
sudo docker run -p 8050:8050 -p 8051:8051 scrapinghub/splash
在你的终端。
然后在新的终端使用scrapy shell
。
然后写入lua_script for splash来执行js转到页面底部,如:
lua_script = '''
function main(splash)
splash:go(splash.args.url)
splash:wait(2)
splash:runjs("your_javascript")
splash:wait(2)
return splash:html()
end
'''
和:
import json
import requests
splash_url = 'http://localhost:8050/execute'
headers = {'content-type': 'application/json'}
data = json.dumps({'lua_source': lua_script})
response = requests.post(splash_url, headers=headers, data=data)
然后检查:
response.content
看它是否一致。
以上是关于如何找到一个非常深层嵌套的A HREF让我的蜘蛛找到NEXT按钮?的主要内容,如果未能解决你的问题,请参考以下文章