python - 抓取时难以使用 Xpath/CSS

标签 python css xpath scrapy

我正在尝试抓取这个网站:

https://www.coolblue.nl/en/our-assortment

我正在收集产品类别的所有 URL 列表。我几乎都能得到它们。出于某种原因,那些“更多...”选项卡真的很难获得。

我相信这与我的选择器有关。在这一点上,我试图在 shell 中获取那些特定的“更多..”URL,只是为了弄清楚如何正确选择它们。例如,在“膝上型电脑、台式机和显示器”部分,“更多...”类别具有 href="/en/laptops-desktops-monitors"。它位于“监视器”类别之后,带有 href="/en/monitors"。

这是我想做的。

我打开一个 scrapy shell:

scrapy shell https://www.coolblue.nl/en/our-assortment

然后我尝试通过索引选择我想要的内容。我以不同的方式尝试了 Xpath 和 CSS:

>>> response.xpath("//a[@class='category-navigation--link']/@href")[3].getall()
['/en/monitors']
>>> response.xpath("//a[@class='category-navigation--link']/@href")[4].getall()
['/en/keyboards']

>>> response.xpath("//a[contains(@class, 'category-navigation--link')]/@href")[3].getall()
['/en/monitors']
>>> response.xpath("//a[contains(@class, 'category-navigation--link')]/@href")[4].getall()
['/en/keyboards']

>>> response.css("a.category-navigation--link::attr('href')")[3].getall()
['/en/monitors']
>>> response.css("a.category-navigation--link::attr('href')")[4].getall()
['/en/keyboards']

如您所见,它从“显示器”类别跳到了“键盘”类别,我不知道为什么。第 4 个索引应该有一个值“/en/laptops-desktops-monitors”,它不在该列表的任何其他地方,因为我已经搜索过它。

它应该显示在第 4 个索引中,但它没有...知道发生了什么吗?

最佳答案

您无法获得 Laptops, desktops & monitors 的原因是该链接没有类 category-navigation--link。使用下面的 xpath 将检索类别标题和导航链接。

//a[@class='category-navigation--link' or parent::h3[@class='product-category-navigation__title']]/@href

关于python - 抓取时难以使用 Xpath/CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55165487/

相关文章:

xml - 如何获取 XML 根元素及其属性,但没有内容

php - 如何在 XPath 中使用 AND 运算符?

javascript - 使用 xpath.js NPM 模块解析 XML

python - 用于 Python 的 Pandas : Exception: Data must be 1-dimensional

python - sys.argv 可以处理可选参数吗?

html - 为什么 <select> 有时是白色有时是灰色?

javascript - 如何在没有 jquery 的情况下仅使用 EventListener 切换子菜单?

python - 无法从docker容器内的python连接redis

python - 字符串索引超出范围Python元组

html - 如何从 Firefox 中的选择元素中删除箭头