【发布时间】:2018-07-15 18:54:41
【问题描述】:
我对 Python 和 Scrapy 还很陌生,这就是我创建一个项目供自己学习它的原因。但目前我正在努力从以下页面获取数据:Website to crawl
正如我在 Chrome/Firefox 的“开发人员工具”中看到的那样,有 8 个表的类如下:<table class="sc-fHxwqH ddWfJE">
在这张图片structure and table I'd like to extract 中,您可以看到我想要提取的结构和列 (<td>),其中值为 = "Wheelchair Access"。该值在第二列中,它是一个图片标签。
它是这样读的:如果我能找到它(在本例中为“轮椅可访问”),如果我根本找不到它,则该值等于 true,那么该值等于 false。
我管理它周围的事情,比如浏览网站的父详细信息三。但是现在我无法通过class="sc-fHxwqH ddWfJE" 浏览到正确的 XPATH 来查找此表
我试图将其范围缩小到 shell cmd 中的最基本内容:
scrapy shell 'https://www.immoscout24.ch/de/d/wohnung-kaufen-bevilard/4761145?s=2&t=2&l=436&r=40&se=16&ci=3&ct=1290'
tables = response.xpath('//*[@class="sc-fHxwqH ddWfJE"]/table')
for table in tables[1:]:
print("I found it!!") #this should be returned 8 times, once for each table
table.xpath('tr/td[1]//text()').extract_first()
通往轮椅通道的完整路径是:
//*[@id="root"]/div/div/div[1]/section/article[7]/table/tbody/tr[1]/td[1]
不幸的是,上面的代码没有返回任何东西。我没有收到任何错误,但也没有我期望的打印。
- 我做错了什么?我想不会那么难吧?
- 找到正确的表后,如何以最简单、最快的方式将数据从表中提取到 JSON?我想这会很慢,因为基本上我需要多次解析整个 HTML 代码来查找每个属性描述是否存在?
感谢您的所有帮助或任何提示!我已经花了几天时间试图弄清楚..
【问题讨论】:
-
如果
"sc-fHxwqH ddWfJE"是table节点的类名,那么XPath 应该是//table[@class="sc-fHxwqH ddWfJE"]因为'//*[@class="sc-fHxwqH ddWfJE"]/table'表示table是某个具有类的节点的直接子节点名称"sc-fHxwqH ddWfJE"。请注意,每张票您应该问一个问题。如果您有更多问题 - 请在单独的工单中提出 -
我确实使用 scrapy shell 尝试了你的命令,你的 xpath 对我有用。
response.xpath('//*[@id="root"]/div/div/div[1]/section/article[7]/table/tbody/tr[1]/td[1]//text()').extract_first()产生'Rollstuhlgängig',这是轮椅可访问的德语单词 :-) 顺便说一句,找到好的 xpath 的快速方法是使用 Chrome 的 XPath Helper 扩展。 -
非常感谢@Andersson,效果很好。我以为我也试过了,但可能犯了一个错误。我现在将尝试解决问题 2。我完成后会立即发布我的答案。除非有人对此有答案,否则请随时发布。
标签: python html xpath web-scraping scrapy