#python #python-3.x #web-scraping #scrapy
#python #python-3.x #очистка веб-страниц #scrapy
Вопрос:
Я хочу использовать scrapy для обхода веб-сайта, только внутри веб-сайта, а не внешних ссылок.
вот что я пробовал :
import scrapy
import json
import uuid
import os
from scrapy.linkextractors import LinkExtractor
class ItemSpider(scrapy.Spider):
name = "items"
allowed_domains = ['https://www.website.com']
start_urls = ['https://www.website.com/post']
rules = (Rule(LxmlLinkExtractor(allow=()), callback='parse_obj', follow=True),)
def parse_obj(self, response):
for link in LxmlLinkExtractor(allow=self.allowed_domains).extract_links(response):
response_obj = {}
counter = 1
for item in response.css(".category-lcd"):
title = item.css("div.td-post-header > header > h1::text").extract()
title_name = title[0]
response_obj[counter] = {
'demo': item.css("div.td-post-content > blockquote:nth-child(10) > p::text").extract(),
'title_name': title_name,
'download_link': item.css("div.td-post-content > blockquote:nth-child(12) > p::text").extract()
}
counter = 1
filename = str(uuid.uuid4()) ".json"
with open(os.path.join('C:/scrapy/tutorial/results/',filename), 'w') as fp:
json.dump(response_obj, fp)
Но scraper не работает, что не так ?!
В нем говорится :
Ошибка Scrapy TabError: непоследовательное использование табуляций и пробелов в отступах
Комментарии:
1. вам нужно сделать отступ после для ссылки в LXMLLINK Extractor(разрешить=self.allowed_domains).extract_links(ответ):
2. @QHarr Я сделал отступ, но по-прежнему безуспешно.
3. что означает «не повезло»? Вы продолжали проверять правильность отступов в вашем коде?
4. у вас есть блок без отступа для вашего цикла for в строке 12, сделайте отступ в этом блоке, и ваш код будет работать.
Ответ №1:
Вам нужно добавить отступ в эту часть:
for link in LxmlLinkExtractor(allow=self.allowed_domains).extract_links(response):
response_obj = {}
counter = 1