【问题标题】:How to get the right xpath for this node? scrapy如何为该节点获取正确的 xpath?刮擦
【发布时间】:2021-08-08 07:30:58
【问题描述】:

我是使用 web scrapy 的新手,我一直在尝试从这部分代码中获取正确的 xpath。

from this website

hmtl code

我一直在使用这个scrapy命令:

response.xpath('//*[@id="companycontent"]/div/div/div[2]/div/div[6]/div').getall()

这是输出:

['<div class="address">\r\n                                    <h4>Address <span>1</span></h4>\r\n                                    <strong>Office : </strong>1715 , 1714<br>\r\n                                    <strong>Floor : </strong>Floor 17<br>\r\n                                    <strong>Building : </strong>Shatha Tower<br>\r\n                                    Dubai Internet City<br><br>\r\n                        \t\t</div>']

response.xpath('//*[@id="companycontent"]/div/div/div2/div/div[6]/div').get() '\r\n 地址 1\r\n 办公室:1715、1714
\r\n 楼层:17楼
\r\n 建筑:沙塔塔
\r\n迪拜互联网城

\r\n \t\t'

还有这个:

response.xpath('//div[contains(@class, "address")]/text()').extract()

输出:

['\r\n                        \r\n                            \r\n                        \t\t\t\t\t\t\t\t                                ', '\r\n                                    ', '\r\n                                    ', '1715 , 1714', '\r\n                                    ', 'Floor 17', '\r\n                                    ', 'Shatha Tower', '\r\n                                    Dubai Internet City', '\r\n                        \t\t', '        \r\n                        \t\t\r\n\r\n\t\t\t\t\t\t                            \r\n                    ']

response.xpath('//div[contains(@class, "address")]/text()').getall() ['\r\n \r\n \r\n \t\t\t\t\t\t\t\t ', '\r\n ', '\r\n ', '1715 , 1714 ', '\r\n ', '17 楼', '\r\n ', '沙塔塔', '\r\n 迪拜互联网城', '\r\n \t\t', ' \r \n \t\t\r\n\r\n\t\t\t\t\t\t \r\n ']

我确信第一个命令会完成这项工作,但我想知道是否有更短的 xpath 命令来运行脚本。 希望任何人都可以帮助我。

【问题讨论】:

    标签: python html xpath scrapy


    【解决方案1】:

    通过xpath查找文本跟随//tag-name[@class="class-name"]你可以按照这个方法查找数据

    代码:

    from selenium import webdriver
    path="C:\Program Files (x86)\chromedriver.exe"
    driver=webdriver.Chrome(path)
    driver.get("https://tecomgroup.ae/directory/company.php?company=0016F00001wcgFJQAY&csrt=2648526569298119449")
    data=driver.find_element_by_xpath('//div[@class="address"]')
    data.text.split("\n")
    

    输出:

    ['ADDRESS 1',
     'Office : 1715 , 1714',
     'Floor : Floor 17',
     'Building : Shatha Tower',
     'Dubai Internet City']
    

    【讨论】:

    • 那个输出就是我要找的。所以我必须为此使用 Selenium。是否可以在同一个 python 代码中同时使用 scrapy 和 selenium?
    • 哦,对不起,我以为您正在使用 selenium,您可以使用 selenium,但我不知道 scrapy,所以您可以尝试从 SO 进行这两种组合!
    【解决方案2】:

    您也可以使用 css 选择器response.css('div.address &gt; div.address ::text')

    print(`[x.strip() for x in response.css('div.address > div.address ::text').getall() if x.strip()]`)
    

    【讨论】:

    • 我从未使用过 css 选择器...我可能需要好好阅读一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    相关资源
    最近更新 更多