Я пытаюсь переписать код, который я создал с помощью библиотеки requests- html. Из-за дополнительных функций, необходимых для проекта, я сейчас использую scrapy.
У меня проблемы с получением паука scrapy / spla sh для получения xpaths. Каждый раз, когда я запускаю код, я ничего не получаю.
С запросами- html xpaths возвращает желаемые данные.
запросы- html код:
from requests_html import AsyncHTMLSession, HTMLSession
asession = AsyncHTMLSession()
async def get_page():
code = 'NASDAQ-MDB'
r = await asession.get(f'https://www.tradingview.com/symbols/{code}/')
await r.html.arender(wait=4)
return r
results = asession.run(get_page)
for result in results:
enterprise_value_sel = "(//span[@class='tv-widget-fundamentals__value apply-overflow-tooltip'])[2]"
total_shares_outstanding_sel = "(//span[@class='tv-widget-fundamentals__value apply-overflow-tooltip'])[4]"
enterprise_value = result.html.xpath(enterprise_value_sel, first=True).text
total_shares_outstanding = result.html.xpath(total_shares_outstanding_sel, first=True).text
print(enterprise_value, total_shares_outstanding)
scrapy_splash_code:
import scrapy
from scrapy_splash import SplashRequest
import json
from tradingview.items import *
import datetime
import os
class TradingviewsigsSpider(scrapy.Spider):
name ='tradingviewsigs'
script = """
function main(splash, args)
assert(splash:go(args.url))
assert(splash:wait(5.5))
local scroll_to =splash:jsfunc("window.scrollTo")
scroll_to(0, 800)
return {
html =splash:html(),
png =splash:png(),
har =splash:har(),
}
end
"""
start_urls =['https://tradingview.com/symbols/NASDAQ-MDB/']
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url=url,
callback=self.parse,
endpoint='execute',
args={'lua_source': self.script})
def parse(self, response):
url = response.url
print('Crawling: < {} >'.format(url))
financials = TradingviewItem()
financials['enterprise_val_sel'] = response.xpath("(//span[@class='tv-widget-fundamentals__value apply-overflow-tooltip'])[2]/text()").extract_first()
financials['total_shares_outstanding_sel'] = response.xpath("(//span[@class='tv-widget-fundamentals__value apply-overflow-tooltip'])[4]/text()").extract_first()
yield financials
Что мне нужно сделать, чтобы xpaths был совместим со scrapy?