Почему селен только соскребает первую страницу? - PullRequest
0 голосов
/ 11 октября 2019

Я хочу очистить этот веб-сайт https://hamariweb.com/news/newscategory.aspx?cat=3. Код работает нормально, но он непрерывно очищает только данные с первой страницы. Вот мой код

import scrapy
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from scrapy import Spider, Request
from scrapy import signals
from scrapy.http import HtmlResponse
import time
import os

class WebnewsSpider(scrapy.Spider):
   name = 'webnews'
   allowed_domains = ['www.hamariweb.com']
   start_urls = ['https://hamariweb.com/news/newscategory.aspx?cat=3']
 def __init__ (self):
    options = webdriver.ChromeOptions()
    options.add_argument("--start-maximized")
    self.driver=webdriver.Chrome("C://Users//hammad//Downloads//
    chromedriver",chrome_options=options)

 def parse(self, response):
    self.driver.get(response.url)
    pause_time = 1
    last_height = self.driver.execute_script("return 
                                               document.body.scrollHeight")

    #start = datetime.datetime.now()

    for i in range(10):
        self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight + 400);")
        time.sleep(pause_time)

        url2=response.xpath('.//*[@class="news_img"]/a/@href').extract()
        print("\n\n\n",url2,"\n\n\n")
        new_height = self.driver.execute_script("return document.body.scrollHeight")

    self.driver.close()
    #print("\n\n",len(l))

1 Ответ

0 голосов
/ 11 октября 2019

Шаги:

  • найти последнее сообщение / текст в текущем представлении.
  • выполнить прокрутку вниз по последнему сообщению, чтобы вызвать «загрузить дополнительные данные»

Дополнительная информация:

Вы можете просто сделать document.querySelectorAll('#CatNewsList > div').length Результатом будет количество сообщений. Выполните итерацию по каждому сообщению и извлеките URL:

Селектор CSS:

# CatNewsList> div .news_img> a

Теперь вы можете получить тег'href' и извлеките ссылку.

Когда вы дойдете до последнего сообщения, выполните прокрутку до конца и дождитесь, пока элемент с XPATH: //p[text()='loading more news... '] не станет ВИДИМЫМ.

Как этоВы уверены, что страница не загружает ничего нового. Сохраните предыдущий размер сообщений и начните анализировать его до следующей длины сообщений.

Повтор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...