Соскрести URL с динамической веб-страницы с помощью Scrapy - PullRequest
0 голосов
/ 07 октября 2019

Я хочу создать в Scrapy веб-скребок, который будет извлекать 10000 ссылок новостей с этого сайта. https://hamariweb.com/news/newscategory.aspx?cat=7 Эта веб-страница динамична, когда я прокручиваю больше ссылок.

Я пробовал ее с селеном. но он не работает.

import scrapy
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from scrapy import signals
from scrapy.http import HtmlResponse

class WebnewsSpider(scrapy.Spider):
   name = 'webnews'
   allowed_domains = ['www.hamariweb.com']
   start_urls = ['https://hamariweb.com/news/newscategory.aspx?cat=7']


 def __init__ (self):
    options = webdriver.ChromeOptions()
    options.add_argument("--start-maximized")
   # options.add_argument('--blink-settings=imagesEnabled=false')
    options.add_argument('--ignore-certificate-errors')
    options.add_argument('--incognito') 
    self.driver = webdriver. Chrome("C://Users//hammad//Downloads//chrome 
    driver",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()

    while True:
        self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight + 400);")
        time.sleep(pause_time)
        print("\n\n\nend\n\n\n")
        new_height = self.driver.execute_script("return document.body.scrollHeight")

Вышеупомянутый код открывает браузер в режиме инкогнито и продолжает прокручиваться вниз. Я также хочу извлечь 10000 ссылок на новости и остановить браузер при достижении лимита.

1 Ответ

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

Вы можете добавить логику для сбора URL-адресов в ваш метод parse (), собрав css hrefs:

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()
    urls = []
    while True:
        if len(urls) <= 10000:
            for href in response.css('a::attr(href)'):
                urls.append(href) # Follow tutorial to learn how to use the href object as you need
        else:
            break # Exit your while True statement when 10,000 links have been collected
        self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight + 400);")
        time.sleep(pause_time)
        print("\n\n\nend\n\n\n")
        new_height = self.driver.execute_script("return document.body.scrollHeight")

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

Я не проверял это с бесконечной прокруткой, поэтому вам может потребоваться внести некоторые изменения, но это должно помочь вамв правильном направлении.

...