python scrapy-从<;表>;-没有id标签

python scrapy-从<;表>;-没有id标签,python,html,xpath,web-scraping,scrapy,Python,Html,Xpath,Web Scraping,Scrapy,我对Python和Scrapy非常陌生,这就是为什么我为自己创建了一个项目来学习它。但目前我正努力从以下页面获取数据: 正如我在Chrome/Firefox的“开发者工具”中看到的,有8个表的类如下: 在这张图片中,您可以看到我要提取的结构和列(),其中的值为=“轮椅可访问”。该值位于第二列,它是一个图片标记。 它是这样读的:如果我能找到它(在这个例子中是“轮椅可接近”),那么这个值等于true,如果我根本找不到它,那么这个值等于false 我围绕着它做了一些事情,比如浏览网站的家长详细信息。但

我对Python和Scrapy非常陌生,这就是为什么我为自己创建了一个项目来学习它。但目前我正努力从以下页面获取数据:

正如我在Chrome/Firefox的“开发者工具”中看到的,有8个表的类如下:

在这张图片中,您可以看到我要提取的结构和列(
),其中的值为=“轮椅可访问”。该值位于第二列,它是一个图片标记。 它是这样读的:如果我能找到它(在这个例子中是“轮椅可接近”),那么这个值等于true,如果我根本找不到它,那么这个值等于false

我围绕着它做了一些事情,比如浏览网站的家长详细信息。但是现在我无法浏览到正确的XPATH来查找带有
class=“sc fHxwqH ddWfJE”

我试图在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代码进行多次解析,以确定每个属性描述是否存在

  • 我感谢你的帮助或任何提示!我已经花了几天时间试图弄明白这一点。

    如果我理解正确(用
    h2
    检查每一篇
    文章的
    节点,然后是

    for table_node in response.xpath('//article/h2/following::*[1][name()="table"]'):
        #process each table here
    

    不需要请求HTML、刮取节点值并将它们放入JSON,因为所需的数据已经来自JSON格式的API

    试一试

    import requests
    import json
    
    url = "https://react-api.immoscout24.ch/v1.3/properties/4761145?ci=3&ct=1290&l=436&lng=de&p=4761145&r=40&s=2&se=16&t=2"
    response = requests.get(url).json()
    
    然后您可以获得所需的数据,如

    print(response['propertyDetails']['agency'])
    
    输出:

    {'companyCity': 'Bevilard', 'companyName1': 'avendre.ch ', 'companyName2': 'Agen
    ce Berne', 'companyPhoneMobile': '078 868 60 64', 'companyStreet': 'Rue Principa
    le 41', 'companyZip': '2735', 'email': 'berne@avendre.ch', 'firstName': 'Verena'
    , 'gender': 'f', 'lastName': 'Pecaut-Steiner', 'logoUrl': 'https://www.immoscout
    24.ch/resources/memberlogos/L356353-R.jpg', 'nameFormatted': 'Verena Pecaut-Stei
    ner', 'webUrl': 'http://www.avendre.ch'}
    

    如果
    “sc-fHxwqH-ddWfJE”
    节点的类名,那么XPath应该是
    //表[@class=“sc-fHxwqH-ddWfJE”]
    作为
    '/*[@class=“sc-fHxwqH-ddWfJE”]/table'
    的意思是
    ,它是类名为
    的某个节点的直接子节点
    。请注意,每张票据您应该问一个问题。如果您有更多问题,请在单独的票据中提问。我使用scrapy shell尝试了您的命令,您的xpath对我有效。
    response.xpath('/*[@id=“root”]/div/div/div/div/div/section/article[7]/table/tbody/tr[1]/td[1]///text())。首先提取()
    产生
    'Rollstuhlgängig'
    这是一个德语单词,意思是轮椅无障碍:-)顺便说一句,找到好的XPath的一个快速方法是在Chrome上使用XPath Helper扩展。非常感谢,@Andersson,效果非常好。我想我也试过了,但可能弄错了。我现在将尝试解决问题2。我一写完就把答案贴出来。除非有人对此有答案,否则请随意发布。这绝对令人惊讶!你是怎么发现的,他们的网站上甚至没有记录:-)。我在谷歌上搜索了一下,发现了这个,我想你就是这样做的。可能会帮助其他人阅读,谢谢@sspaeti,网页上显示的所有数据很可能来自HTTP请求,您只需执行F12并切换到网络选项卡,即可检查浏览器发送的请求以获取动态内容