在Coinmarketcap上的Scrapy中为response.xpath或response.css找到正确的选择器时遇到问题

时间:2019-10-19 20:45:07

标签: xpath scrapy css-selectors

我想遍历coinmarketcap上排名前20位的交易所,例如https://coinmarketcap.com/exchanges/fatbtc/

现在我花了几个小时找到选择器,例如价格为

在Scrapy Shell中,我尝试了……等等,但是都无法正常工作:

来自Addon XPath Helper

response.xpath('/html/body/div[@id='__next']/div[@class='cmc-app-wrapper.cmc-app-wrapper--env-prod.sc-1mezg3x-0.fUoBLh']/div[@class='container.cmc-main-section']/div[@class='cmc-main-section__content']/div[@class='cmc-exchanges.sc-1tluhf0-0.wNRWa']/div[@class='cmc-details-panel-table.sc-3klef5-0.cSzKTI']/div[@class='cmc-markets-listing.lgsxp9-0.eCrwnv']/div[@class='cmc-table.sc-1yv6u5n-0.dNLqEp']/div[@class='cmc-table__table-wrapper-outer']/div/table/tbody/tr[@class='cmc-table-row.sc-1ebpa92-0.kQmhAn'][1]/td[@class='cmc-table__cell.cmc-table__cell--sortable.cmc-table__cell--right.cmc-table__cell--sort-by__price']').getall()

来自Chrome检查器:

response.xpath('/td[@class='cmc-table__cell.cmc-table__cell--sortable.cmc-table__cell--right.cmc-table__cell--sort-by__price']').getall()

从Chrome检查器复制XPath : :

response.xpath('//*[@id="__next"]/div/div[2]/div[1]/div[2]/div[2]/div/div[2]/div[3]/div/table/tbody/tr[1]/td[5]').extract()

我使用的是Chrome Inspector,从今天起,一个名为“ Xpath helper”的插件用于显示选择器,但我仍然不太明白我在这里所做的事情:( ..我非常感谢任何想法访问这些数据,并让我对找到这些选择器有更好的了解。

2 个答案:

答案 0 :(得分:1)

非常简单(我用position()跳过了表头):

for row in response.xpath('//table[@id="exchange-markets"]//tr[position() > 1]'):
    price = row.xpath('.//span[@class="price"]/text()').get()
#    price = row.xpath('.//span[@class="price"]/@data-usd').get() #if you need to be more precise

答案 1 :(得分:0)

XPATH基本上是HTML的// tagname [@ attribute ='value']。

对于您的网站,您可以使用//table[@id='exchange-markets']//tr/td[2]/a遍历名称

并使用//table[@id='exchange-markets']//tr/td[5]

获取价格

我们基本上是说要在第5列的表格行中查看。