如何从javascript呈现的网站上抓取一些数据(每个请求的类名都会更改)

时间:2019-05-19 17:07:44

标签: javascript selenium scrapy

我正在尝试从this link中读取餐厅名称,但是却没有显示。网站是用javascript呈现的,因此我使用硒来抓取数据。我注意到,在每个新请求中,类名称都在更改因此无法提取数据。这是我到目前为止一直尝试的代码。

import re
from datetime import datetime
from scrapy import Spider
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

import time
from selenium.webdriver.common.by import By
import scrapy
import selenium
from scrapy.selector import Selector
from scrapy.http import Request
from selenium.common.exceptions import NoSuchElementException


class MyUberSpider(Spider):
    name = "Uber"
    date_insert = datetime.now().strftime("%d-%m-%Y %H:%M:%S")


    def parse(self, response):
        header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko)'
                                ' Chrome/71.0.3578.98 Safari/537.36'}
        options = Options()
        options.add_argument("--incognito")
        options.add_argument("--disable-extensions")
        options.add_argument(" --disable-gpu")
        options.add_argument(" --disable-infobars")
        options.add_argument(" -–disable-web-security")
        options.add_argument("--no-sandbox")
        caps = options.to_capabilities()
        driver = webdriver.Chrome('/usr/bin/chromedriver', desired_capabilities=caps)
        driver.get('https://www.ubereats.com/en-IN/albuquerque')
        # driver.maximize_window()
        scrapy_selector = Selector(text=driver.page_source)
        restaurant_row = scrapy_selector.xpath('//div[@class="base_ ue-i3"]')

我该如何实现?

1 个答案:

答案 0 :(得分:0)

这是可用于获取餐厅行的xpath。

//div[@class='base_ ']//div[starts-with(@class,'base_ ')] 

如果您想直接访问餐厅,可以在xpath下使用

//div[@class='base_ ']//a[starts-with(@class,'base_ ')]