Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python lxml xpath-返回所有标记,而不是所选标记_Python_Python 3.x_Xpath_Web Scraping_Lxml - Fatal编程技术网

Python lxml xpath-返回所有标记,而不是所选标记

Python lxml xpath-返回所有标记,而不是所选标记,python,python-3.x,xpath,web-scraping,lxml,Python,Python 3.x,Xpath,Web Scraping,Lxml,这是我的第一篇帖子,世界你好 我正在使用“requests”和“lxml”用Python3编写一个小的webscraper。我已经做了一个,这是不同网站的第二个项目 我遇到了奇怪的结果——xpath方法返回所有标记,而不是所选的div。更糟糕的是,输出乘以“offer detail”DIV的出现次数 Xpath count返回正确的div数,我还将page.content转储到文件并手动检查,结果都是正确的。我已经使用Chrome的“xpath助手”插件在网站上检查了xpath- 刮刀输出-ht

这是我的第一篇帖子,世界你好

我正在使用“requests”和“lxml”用Python3编写一个小的webscraper。我已经做了一个,这是不同网站的第二个项目

我遇到了奇怪的结果——xpath方法返回所有标记,而不是所选的div。更糟糕的是,输出乘以“offer detail”DIV的出现次数

Xpath count返回正确的div数,我还将page.content转储到文件并手动检查,结果都是正确的。我已经使用Chrome的“xpath助手”插件在网站上检查了xpath-

刮刀输出-
http://pastebin.com/1bEdzXdJ
(又长又乱)

但在我的第一个项目中,没有发生类似的情况,它仍然返回正确的输出

刮取的网址:
http://www.ibood.com/pl/pl/all-deals/

我非常感谢move advanced用户提供的任何帮助:)

代码:

/
表示从根开始获取所有子体

/
表示从当前上下文节点('deal')获取所有子体

这将返回所有节点:

count: 4.0
['\n                                                    ', 'Przenośny głośnik Bluetooth UE MEGABOOM', '\n                            ', '\n                                ', 'Cena katalogowa ', '1.319,95 zł', 'Tylko', 'Dzisiaj', '579,95 zł', '                                ', '\n    ', '\n        ', '\n                    ', 'Przewidywany czas wysyłki dla tego produktu  to 13.01.2017', '\n            ', '\n    29,95 zł Dostawa', '                            ', '\n                            ', '\n                                ', '\n                                    ', '\n                                ', '\n                                                            ', '\n                            ', '\n                                                        ', '\n                            ', '\n                                                                    ', 'Wyprzedane!', '\n                                                            ', '\n                            ', '56%', 'zniżka', '\n                                               ']
更好的方法:

for deal in deals:
    print(deal.xpath('normalize-space(string())'))
输出:


normalize space
函数返回参数字符串,其中包含通过剥离前导和尾随空格并用单个空格替换空格字符序列而规范化的空格。

发布问题后,我找到了解决方案:

我应该使用“//”而不是“/”


在发布我的答案之前,我还没有看到你的答案,但你的答案更广泛。谢谢你的“规范化空间”——现在看起来好多了
count: 4.0
['\n                                                    ', 'Przenośny głośnik Bluetooth UE MEGABOOM', '\n                            ', '\n                                ', 'Cena katalogowa ', '1.319,95 zł', 'Tylko', 'Dzisiaj', '579,95 zł', '                                ', '\n    ', '\n        ', '\n                    ', 'Przewidywany czas wysyłki dla tego produktu  to 13.01.2017', '\n            ', '\n    29,95 zł Dostawa', '                            ', '\n                            ', '\n                                ', '\n                                    ', '\n                                ', '\n                                                            ', '\n                            ', '\n                                                        ', '\n                            ', '\n                                                                    ', 'Wyprzedane!', '\n                                                            ', '\n                            ', '56%', 'zniżka', '\n                                               ']
for deal in deals:
    print(deal.xpath('normalize-space(string())'))
count: 4.0
Przenośny głośnik Bluetooth UE MEGABOOM Cena katalogowa 1.319,95 złTylkoDzisiaj579,95 zł Przewidywany czas wysyłki dla tego produktu to 13.01.2017 29,95 zł Dostawa Wyprzedane! 56%zniżka
Ukośnica Metabo KGS 254 M Cena katalogowa 1.639,95 złTylkoDzisiaj1.024,95 zł Przewidywany czas wysyłki dla tego produktu to 17.01.2017 39,95 zł Dostawa 11:18:18 lub do wyprzedania zapasów! Kupuję! 38%zniżka
3 pary bokserek SuperDry Cena katalogowa 179,95 złTylkoDzisiaj114,95 zł Przewidywany czas wysyłki dla tego produktu to 17.01.2017 29,95 zł Dostawa 11:18:18 lub do wyprzedania zapasów! Kupuję! 36%zniżka
2 Ładowarki akumulatorów Philips MultiLife Cena katalogowa 124,95 złTylkoDzisiaj34,95 zł Przewidywany czas wysyłki dla tego produktu to 11.01.2017 29,95 zł Dostawa 11:18:18 lub do wyprzedania zapasów! Kupuję! 72%zniżka