【发布时间】:2020-10-18 08:02:55
【问题描述】:
我正在学习使用 scrapy 并使用 XPath 选择器,并决定通过从 craigslist 中抓取职位名称来练习。
这是我试图从 craigslist 页面中抓取职位名称的单个职位链接的 html:
<a href="https://orangecounty.craigslist.org/sof/d/trabuco-canyon-full-stack-net-developer/7134827958.html" data-id="7134827958" class="result-title hdrlnk">Full Stack .NET C# Developer (Mid-Level, Senior) ***LOCAL ONLY***</a>
我想做的是用类结果标题检索所有相似的 a 标签,所以我使用了 XPath 选择器:
titles = response.xpath('//a[@class="result-title"/text()]').getall()
但我收到的输出是一个空列表:[]
我能够直接从 Chrome 的检查器复制 XPath,它最终运行良好,并为我提供了完整的职位名称列表。这个选择器是:
titles = response.xpath('*//div[@id="sortable-results"]/ul/li/p/a/text()').getall()
我知道为什么第二个 XPath 选择器有效,但我不明白为什么我的第一次尝试无效。有人可以向我解释为什么我的第一个 XPath 选择器失败了吗?如果有帮助/有必要,我还提供了指向下面 craigslist 页面的完整 html 的链接。我是scrapy的新手,想从我的错误中吸取教训。谢谢!
查看来源:https://orangecounty.craigslist.org/search/sof
【问题讨论】:
-
因为您的
a元素有多个类,@class="result-title"测试将失败。相反,您需要检查类是否包含结果标题。 -
谢谢!您的评论与下面的答案一起帮助我解决了我的困惑。
标签: python html xpath web-scraping scrapy