刮取时难以使用Xpath/CSS

2024-09-29 06:31:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试废弃此网站:

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

我正在收集产品类别的所有URL列表。我几乎可以得到所有的。出于某种原因,那些“更多…”标签真的很难得到。你知道吗

我相信这和我的选择者有关。此时,我正在尝试在shell中获取那些特定的“More..”url,只是想弄清楚如何正确地选择它们。例如,在“笔记本电脑、台式机和监视器”部分中,“更多..”类别具有href=“/en/Laptops desktops monitors”。它位于“Monitors”类别之后,带有href=“/en/Monitors”。你知道吗

这就是我想做的。你知道吗

我打开一个粘糊糊的贝壳:

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']

如你所见,它从“显示器”类别跃升到“键盘”类别,我不知道为什么。第四个索引应该有一个值'/en/laptops desktops monitors',它不在该列表的任何其他位置,因为我已经搜索过了。你知道吗

它应该显示在第四个索引中,但它不。。。你知道怎么回事吗?你知道吗


Tags: httpsresponsewwwlink类别xpathclassen
2条回答

由于某些原因,这些“更多”链接并不总是显示在页面中: enter image description here

我也明白了: enter image description here

注意,在一个版本中它有“更多”链接,在另一个版本中标题是链接。每当我清除缓存时,就会得到第二个版本。Scrapy似乎也得到了没有“更多”链接的版本。你知道吗

相反,我建议您从菜单中获取链接(即使它们对您来说是隐藏的)。你知道吗

以下是如何在“计算机和平板电脑”菜单中获得(蓝色)标题链接:

>>> response.css('#computers-tablets .product-category-navigation__title a::attr("href")').getall()
['/en/laptops-desktops-monitors', '/en/peripherals', '/en/tablets-ereaders', '/en/computer-parts', '/en/printers-scanners', '/en/memory-storage', '/en/network-internet', '/en/gaming']

以下是如何获得每个标题下的链接:

>>> response.css('#computers-tablets .category-navigation item a::attr("href")').getall()
['/en/laptops', '/en/laptops/apple-macbook', '/en/desktops', '/en/monitors', '/en/keyboards', '/en/mouses', '/en/office-supplies', '/en/tablets', '/en/tablets/apple-ipad', '/en/e-readers', '/en/tablet-covers', '/en/internal-hard-drives', '/en/internal-ssd', '/en/video-cards', '/en/ram', '/en/printers', '/en/scanners', '/en/cartridges', '/en/toners', '/en/external-hard-drives', '/en/external-ssds', '/en/memory-cards', '/en/nas', '/en/routers', '/en/powerline-adapters', '/en/network-switches', '/en/wifi-repeaters', '/en/consoles', '/en/video-games', '/en/gaming-headsets', '/en/vr-gear']

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

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

相关问题 更多 >