如何找到一个非常深层嵌套的A HREF让我的蜘蛛找到NEXT按钮?

问题描述 投票:1回答:3

我正在制作我的第二只蜘蛛,我发现这个特殊的结构对我来说非常复杂,我希望你能帮助我。

我有这个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>?

谢谢!

css xpath web-scraping scrapy scrapy-spider
3个回答
0
投票

这个XPath将找到最后一个锚元素:

response.selector.xpath('//a[last()]').extract()

你也可以用课来限定它

response.selector.xpath('//a[@class='wx4']').extract()

如果那个班级可能不止一个,那就抓住最后一个:

response.selector.xpath('//a[@class='wx4'][last()]').extract()

0
投票
//a[@class='wx4' and text()='next']

这将搜索使用类“wx4”设置样式且其文本为“next”的链接。


0
投票

也许你应该检查网页,看看它是否必须首先被泼溅:

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

看它是否一致。

© www.soinside.com 2019 - 2024. All rights reserved.