gpt4 book ai didi

python - 为什么 xpath 只选择
    中的最后一个

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:27 25 4
gpt4 key购买 nike

我正在尝试抓取此站点:http://www.kaymu.com.ng/ .

我抓取的 HTML 部分是这样的:

<ul id="navigation-menu">
<li> some content </li>
<li> some content </li>
...
<li> some content </li>
</ul>

这是我的蜘蛛:

class KaymuSpider(Spider):
name = "kaymu"
allowed_domains = ["kaymu.com.ng"]
start_urls = [
"http://www.kaymu.com.ng"
]

def parse(self, response):
sel = response.selector
menu = sel.xpath('//ul[@id="navigation-menu"]/li')

菜单只有列表中的最后一个 li 元素。当语法正确选择所有 li 元素时,我不确定为什么会这样。有什么不对的请指教,谢谢!

最佳答案

问题在于菜单是在浏览器执行 javascript 的帮助下动态构建的。 Scrapy 不是浏览器,也没有内置的 javascript 引擎。

希望有一个 script 标签包含菜单对象的 javascript 数组。我们可以找到所需的 script 标签,提取 javascript 数组,借助 json module 将其加载到 Python 列表中。并打印出菜单项名称。

来自 "Scrapy Shell" 的演示:

$ scrapy shell http://www.kaymu.com.ng/

In [1]: script = response.xpath("//script[contains(., 'categoryData')]/text()").extract()[0]

In [2]: import re

In [3]: pattern = re.compile(r'var categoryData = (.*?);\n')

In [4]: data = pattern.search(script).group(1)

In [5]: import json

In [6]: data = json.loads(data)

In [7]: for item in data:
....: print item['name']
....:
Fashion
Jewelry & Watches
Health & Beauty
Sporting Goods
Mobile Phones & Tablets
Audio, Video & Gaming
Computers, Laptops & Accessories
Appliances, Furniture & Decor
Books & Media
Babies & Kids
Food & Beverages
Other

关于python - 为什么 xpath 只选择 <ul> 中的最后一个 <li>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30147905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com