Я написал сканер для очистки Foursquare . Дело в том, что я могу получить из него название 30 ресторанов, но не могу прочитать из него данные о нумерации страниц.
Я попытался очистить нормально, затем использовал селен также, но в браузере без головы он не работает и иногда не может нажать также.Как я могу прочитать все 90 имен на этих страницах. Если это возможно без использования селена.
import scrapy
from time import sleep
from selenium import webdriver
from scrapy.selector import Selector
from Crawlers import settings
from selenium.webdriver.common.by import By
class Foursquare(scrapy.Spider):
name = "learningexercise5"
fs_base_url = 'https://foursquare.com'
start_urls = ['https://foursquare.com/']
chromedriver_path = settings.chromedriver_path
def parse(self, response):
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(self.chromedriver_path, chrome_options=options)
urls = ['https://foursquare.com/explore?cat=food&mode=url&near=New%20York%2C%20NY%2C%20United%20States&nearGeoId=72057594043056517']
for url in urls:
driver.get(url)
sleep(30)
x = driver.find_element(By.XPATH, '//button[@class="blueButton"]')
driver.execute_script("arguments[0].click();", x)
data = driver.page_source
scrapy_html_response = Selector(text=data)
data_row = scrapy_html_response.xpath(
'//div[@id="results"]/ul/li/div[@class="contentHolder"]/div[@class="infoCol"]/div[@class="venueBlock"]/div[@class="venueDetails"]')
for row in data_row:
name = row.css('.venueName').xpath('h2/a/text()').get()
location = row.css('.venueAddress::text').get()
print(name, location)