Приносить предметы с помощью скрапа - PullRequest
0 голосов
/ 23 апреля 2020

У меня проблемы с моим пауком, похоже, способ его установки не работает. Паук должен быть в состоянии очистить несколько страниц (1,2,3), все на одном сайте. Я не уверен, должен ли я сделать для l oop или оператор if / else, чтобы извлечь все данные? Я получаю этот код после того, как я его запустил: просканировал 0 страниц (при 0 страницах / мин), очистил 0 элементов (при 0 элементах / мин).

Любая помощь будет принята с благодарностью!

Ниже показан код для spider, items.py и pipelines.py:

class abcSpider(scrapy.Spider):
name = 'abc'
page_number = 2
allowed_domains = ['']

def parse(self, response):

    items = folder1Item()

    deal_number_var = response.css(".mclbEl a::text").extract()
    deal_type_var = response.css('.#ContentContainer1_ctl00_Content_ListCtrl1_LB1_VDTBL .mclbEl:nth-child(9)').css('::text').extract()


    items['deal_number_var'] = deal_number_var
    items['deal_type_var'] = deal_type_var
    yield items

    next_page = '' + str(abcSpider.page_number) + '/'
    if abcSpider.page_number < 8:
        abcSpider.page_number += 1
        yield response.follow(next_page, callback=self.parse)

Это моя страница items.py:

import scrapy

class folder1Item(scrapy.Item):
deal_number_var = scrapy.Field()
deal_type_var = scrapy.Field()

Я бы хотел сохранить данные в виде файла .db для импорта в sqlite3. Это выглядит так в моем pipelines.py:

import sqlite3

class folder1Pipeline(object):

def __init__(self):
    self.create_connection()
    self.create_table()

def create_connection(self):
    self.conn = sqlite3.connect("abc.db")
    self.curr = self.conn.cursor()

def create_table(self):
    self.curr.execute("""DROP TABLE IF EXISTS abc_tb""")
    self.curr.execute("""create table abc_tb(deal_number_var text, deal_type_var text)""")

def process_item(self, items, spider):
    self.store_db(items)
    return items

def store_db(self,items):
    self.curr.execute("""insert into abc_tb values (?,?,?)""" , (items['deal_number_var'][0], items['deal_type_var'][0]))
    self.conn.commit()

Middleware.py код:

from scrapy.http import HtmlResponse
from selenium import webdriver

class JSMiddleware(object):
def process_request(self, request, spider):
    driver = webdriver.PhantomJS()
    driver.get(request.url)

    body = driver.page_source
    return HtmlResponse(driver.current_url, body=body, encoding='utf-8', request=request)

1 Ответ

0 голосов
/ 23 апреля 2020

Полагаю, это весь ваш код? Если так: вы не определили start_urls. Кроме того, вы должны либо правильно установить allowed_domains, либо полностью удалить переменную, потому что прямо сейчас вы определяете, что URL не разрешен.

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