Я хочу написать скребок, который посещает все подстраницы начальной страницы.
Пример веб-сайта: pydro.com Так, например, он также должен извлечь pydro.com / impressionum и сохраните его в виде html-файла на моем жестком диске.
Код, который я написал:
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.exporters import CsvItemExporter
from scrapy.loader import ItemLoader
from finalproject.items import FinalprojectItem
class ExampleSpider(CrawlSpider):
name = "projects" # Spider name
allowed_domains = ["pydro.com"] # Which (sub-)domains shall be scraped?
start_urls = ["https://pydro.com/"] # Start with this one
rules = [Rule(LinkExtractor(), callback='parse_item', follow=True)] # Follow any link scrapy finds (that is allowed).
def parse_item(self, response):
print('Got a response from %s.' % response.url)
self.logger.info('Hi this is an item page! %s', response.url)
page = response.url.split('.com/')[-1]
filename = 'pydro.html'
with open(filename, 'wb') as f:
f.write(response.body)
self.log('Saved file %s' % filename)
Когда я запускаю своего паука, вывод только pydro.html
.
Я думаю, мне нужно изменить имя файла, чтобы я получил подстраницу.Или мне нужен цикл for?
EDIT1: я отредактировал код, чтобы получить все HTML-страницы.Но когда я хочу запустить скрипт на другом сайте, я получаю сообщение об ошибке:
FileNotFoundError: [Errno 2] No such file or directory: 'otego-https://www.otego.de/de/jobs.php'
Вот сценарий, который я запускаю:
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.exporters import CsvItemExporter
from scrapy.loader import ItemLoader
class ExampleSpider(CrawlSpider):
name = "otego" #Spider name
allowed_domains = ["otego.de"] # Which (sub-)domains shall be scraped?
start_urls = ["https://www.otego.de/en/index.php"] # Start with this one
rules = [Rule(LinkExtractor(), callback='parse_item', follow=True)] # Follow any link scrapy finds (that is allowed).
def parse_item(self, response):
print('Got a response from %s.' % response.url)
self.logger.info('Hi this is an item page! %s', response.url)
page = response.url
filename = 'otego-%s' % page
with open(filename, 'wb') as f:
f.write(response.body)
self.log('Saved file %s' % filename)