问题:
我正在使用scrapy splash 来抓取网页。然而,似乎css路径imageURL
不返回任何元素,但name
工作category
正常。(xpath 和 selector 都是直接从 Chrome 复制而来的。)
我尝试过的事情:
起初我以为是因为调用时页面没有完全加载,parse
所以我将wait
SplashRequest 的参数更改为 5,但它没有帮助。我还从启动 GUI ( http://localhost:8050 )下载了 html 响应的副本,并验证 xpath/selectors 在下载的副本上都可以正常工作。在这里,我假设这个 html 正是 scrapy 所看到的,parse
所以我无法理解为什么它不能在 scrapy 脚本中工作。
代码:
这是我的代码:
class NikeSpider(scrapy.Spider):
name = 'nike'
allowed_domains = ['nike.com', 'store.nike.com']
start_urls = ['https://www.nike.com/t/air-vapormax-flyknit-utility-running-shoe-XPTbVZzp/AH6834-400']
def start_requests(self):
for url in self.start_urls:
yield SplashRequest (
url=url,
callback=self.parse,
args= {
'wait': 5
}
)
def parse(self, response):
name = response.xpath('//*[@id="RightRail"]/div/div[1]/div[1]/h1/text()').extract_first()
imageURL = response.css('#PDP > div > div:nth-child(2) > div.css-1jldkv2 > div:nth-child(1) > div > div > div.d-lg-h.bg-white.react-carousel > div > div.slider-container.horizontal.react-carousel-slides > ul > li.slide.selected > div > picture:nth-child(3) > img::attr(src)').extract_first()
category = response.css('#RightRail > div > div.d-lg-ib.mb0-sm.mb8-lg.u-full-width > div.ncss-base.pr12-sm > h2::text').extract_first()
url = response.url
if name != None and imageURL != None and category != None:
item = ProductItem()
item['name'] = name
item['imageURL'] = imageURL
item['category'] = category
item['URL'] = url
yield item