Я написал скребок в Python scrapy в сочетании с селеном, чтобы вычистить titles
с сайта.css selectors
, определенный в моем скребке, безупречен.Я хочу, чтобы мой скребок продолжал нажимать на следующую страницу и анализировать информацию, встроенную в каждую страницу.Для первой страницы все в порядке, но когда дело доходит до роли селеновой части, скребок снова и снова нажимает на одну и ту же ссылку.
Поскольку я впервые работаю с селеном вместе сScrap, я не имею ни малейшего представления, чтобы успешно двигаться дальше.Любое исправление будет высоко оценено.
Если я попробую вот так, то все будет работать гладко (в селекторах нет ничего плохого):
class IncomeTaxSpider(scrapy.Spider):
name = "taxspider"
start_urls = [
'https://www.incometaxindia.gov.in/Pages/utilities/exempted-institutions.aspx',
]
def __init__(self):
self.driver = webdriver.Chrome()
self.wait = WebDriverWait(self.driver, 10)
def parse(self,response):
self.driver.get(response.url)
while True:
for elem in self.wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,"h1.faqsno-heading"))):
name = elem.find_element_by_css_selector("div[id^='arrowex']").text
print(name)
try:
self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input[id$='_imgbtnNext']"))).click()
self.wait.until(EC.staleness_of(elem))
except TimeoutException:break
Но я намерен заставить мой скрипт запустить этотway:
import scrapy
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
class IncomeTaxSpider(scrapy.Spider):
name = "taxspider"
start_urls = [
'https://www.incometaxindia.gov.in/Pages/utilities/exempted-institutions.aspx',
]
def __init__(self):
self.driver = webdriver.Chrome()
self.wait = WebDriverWait(self.driver, 10)
def click_nextpage(self,link):
self.driver.get(link)
elem = self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[id^='arrowex']")))
#It keeeps clicking on the same link over and over again
self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input[id$='_imgbtnNext']"))).click()
self.wait.until(EC.staleness_of(elem))
def parse(self,response):
while True:
for item in response.css("h1.faqsno-heading"):
name = item.css("div[id^='arrowex']::text").extract_first()
yield {"Name": name}
try:
self.click_nextpage(response.url) #initiate the method to do the clicking
except TimeoutException:break
Эти заголовки отображаются на целевой странице (чтобы вы знали, что я за ним):
INDIA INCLUSION FOUNDATION
INDIAN WILDLIFE CONSERVATION TRUST
VATSALYA URBAN AND RURAL DEVELOPMENT TRUST
I'mЯ не хочу получать данные с этого сайта, поэтому любой альтернативный подход, кроме того, что я пробовал выше, для меня бесполезен.Мое единственное намерение состоит в том, чтобы иметь какое-либо решение, связанное с тем, как я пытался во втором подходе.