Как скрести контент внутри нескольких ссылок, используя Scrapy - PullRequest
0 голосов
/ 07 февраля 2020

Контекст: я пытаюсь почистить новостной сайт для проекта по науке о данных. Я хочу очистить все статьи, представленные в определенной категории этого новостного сайта.

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

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

Мой код: ниже в коде метод parse пытается получить все ссылки на отдельные статьи, представленные на этой странице, и перенаправляет их в метод parse_contents, который пытается очистить внутреннее содержимое этих статей.

Пожалуйста, предложите мне метод достижения результата или укажите на ошибки в моем подходе.

import scrapy
from ..items import ETtestItem

class ETtestSpider(scrapy.Spider):
    name = 'etTest'
    start_urls = [
        'https://economictimes.indiatimes.com/industry/auto/auto-news/articlelist/64829342.cms'
    ]

    def parse(self, response):

# This worked to extract single top article

        article = s.response.css('div.eachStory a::attr(href)').get()
        if article is not None:
            for a in article:
                yield response.follow(article, callback=self.parse_contents)


    def parse_contents (self, response):
        full_article = response.css('div.relative')
        items = ETtestItem()

        for t in full_article:
            title = t.css('.title::text').extract()
            summary = t.css('.title2::text').extract()
            text = t.css('.Normal::text').extract()
            tags = t.css('.rdMrBulDiv a::text').extract()

            items['title'] = title
            items['summary'] = summary
            items['text'] = text
            items['tags'] = tags

            yield items

1 Ответ

0 голосов
/ 07 февраля 2020

следующий код работает для меня.

Просто замените значение i в диапазоне (1, макс. Стр.)

from selenium import webdriver
from selenium.webdriver.common.proxy import *
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
import time

binary = r'C:\Users\AppData\Local\Mozilla Firefox\firefox.exe'
gecko = r'C:\Users\AppData\Local\Continuum\anaconda3\geckodriver.exe'

options = Options()
options.set_headless(headless=False)
options.binary = binary

cap = DesiredCapabilities().FIREFOX
cap["marionette"] = True #optional



driver = webdriver.Firefox(firefox_options=options, capabilities=cap, executable_path= gecko)
driver.maximize_window() 
driver.implicitly_wait(15) 

for i in range(1,2):
    driver.get('https://www.leboncoin.fr/ventes_immobilieres/offres/ile_de_france/p-'+str(i)+'/')
    time.sleep(15)
    print(driver.page_source)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...