Превосходный пакет для веб-сканирования
Scrapy — это быстрый и мощный фреймворк для парсинга веб-страниц для Python. Он разработан, чтобы быть простым в использовании и позволять разработчикам быстро и эффективно очищать веб-сайты.

Вот несколько примеров общих функций Scrapy:
scrapy.Request: эта функция создает запрос к веб-сайту и возвращает объектResponse.
import scrapy
def scrape_website(self):
yield scrapy.Request(url='http://www.example.com', callback=self.parse)
def parse(self, response):
# Code to parse the response goes here
pass
response.xpath: Эта функция позволяет извлекать данные с веб-сайта с помощью селекторов XPath.
import scrapy
def parse(self, response):
title = response.xpath('//title/text()').get()
print(title) # Output: "Example Website"
scrapy.Item: этот класс используется для определения структуры данных, которые вы хотите извлечь с веб-сайта.
import scrapy
class ExampleItem(scrapy.Item):
title = scrapy.Field()
author = scrapy.Field()
date_published = scrapy.Field()
def parse(self, response):
item = ExampleItem()
item['title'] = response.xpath('//title/text()').get()
item['author'] = response.xpath('//div[@class="author"]/text()').get()
item['date_published'] = response.xpath('//div[@class="date"]/text()').get()
yield item
Это всего лишь несколько примеров функций и классов, доступных в Scrapy. Есть много других инструментов, которые вы можете использовать для парсинга веб-сайтов и извлечения с них данных. Scrapy также предоставляет ряд встроенных функций для обработки файлов cookie, перенаправлений и других задач, связанных с Интернетом, что делает его мощным инструментом для просмотра веб-страниц.
Вот еще несколько примеров функций Scrapy:
response.css: Эта функция позволяет извлекать данные с веб-сайта с помощью селекторов CSS.
import scrapy
def parse(self, response):
title = response.css('title::text').get()
print(title) # Output: "Example Website"
scrapy.Spider: этот класс используется для определения паука, который является основным компонентом проекта Scrapy. Паук отвечает за выполнение запросов к веб-сайтам и обработку ответов.
import scrapy
class ExampleSpider(scrapy.Spider):
name = "example"
start_urls = [
"http://www.example.com",
]
def parse(self, response):
# Code to parse the response goes here
pass
scrapy.crawler.CrawlerProcess: этот класс используется для запуска проекта Scrapy.
import scrapy from scrapy.crawler import CrawlerProcess process = CrawlerProcess() process.crawl(ExampleSpider) process.start()
response.follow: эта функция создает новый запрос к URL-адресу, указанному в ответе, и возвращает объект Response.
import scrapy
def parse(self, response):
next_page = response.xpath('//a[@class="next"]/@href').get()
if next_page is not None:
yield response.follow(next_page, callback=self.parse)
scrapy.Selector: Этот класс используется для выбора элементов из документа HTML или XML и извлечения из них данных.
import scrapy
def parse(self, response):
selector = scrapy.Selector(response)
titles = selector.xpath('//title/text()').getall()
print(titles) # Output: ["Example Website"]
scrapy.pipelines.Pipeline: этот класс используется для определения конвейера, который представляет собой набор действий, выполняемых с данными, извлеченными с веб-сайта.
import scrapy
class ExamplePipeline(scrapy.pipelines.Pipeline):
def process_item(self, item, spider):
# Code to process the item goes here
return item
Чтобы использовать конвейер в вашем проекте Scrapy, вам нужно добавить его в параметр ITEM_PIPELINES в файле settings.py.
ITEM_PIPELINES = {
'myproject.pipelines.ExamplePipeline': 300,
}
response.meta: Этот словарь позволяет передавать данные между различными функциями обратного вызова в проекте Scrapy.
import scrapy
def parse(self, response):
next_page = response.xpath('//a[@class="next"]/@href').get()
if next_page is not None:
yield response.follow(next_page, callback=self.parse_page, meta={'page_number': 1})
def parse_page(self, response):
page_number = response.meta['page_number']
# Code to parse the page goes here
scrapy.utils.response.open_in_browser: Эта функция позволяет открыть ответ в веб-браузере для целей отладки.
import scrapy
def parse(self, response):
scrapy.utils.response.open_in_browser(response)
# Code to parse the response goes here
scrapy.linkextractors.LinkExtractor: Этот класс используется для извлечения ссылок с веб-сайта.
import scrapy
from scrapy.linkextractors import LinkExtractor
def parse(self, response):
le = LinkExtractor(restrict_css='div.links')
links = le.extract_links(response)
for link in links:
print(link.url)
scrapy.http.FormRequest: этот класс используется для отправки формы на веб-сайте и возврата объекта Response.
import scrapy
def parse(self, response):
return scrapy.http.FormRequest.from_response(
response,
formdata={'username': 'john', 'password': 'secret'},
callback=self.after_login
)
def after_login(self, response):
# Code to parse the response goes here
pass
response.json: Эта функция позволяет анализировать ответ JSON с веб-сайта.
import scrapy
def parse(self, response):
data = response.json()
print(data) # Output: {"key": "value"}
scrapy.downloadermiddlewares.retry.RetryMiddleware: это промежуточное ПО используется для повторения неудачных запросов.
import scrapy
RETRY_TIMES = 3
RETRY_HTTP_CODES = [500, 502, 503, 504, 522, 524, 408]
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.retry.RetryMiddleware': 90,
'scrapy_proxies.RandomProxy': 100,
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
}
PROXY_LIST = '/path/to/proxy/list.txt'
PROXY_MODE = 0
scrapy.extensions.closespider.CloseSpider: Это расширение используется для закрытия паука при выполнении определенного условия.
import scrapy
class ExampleSpider(scrapy.Spider):
name = 'example'
start_urls = ['http://www.example.com']
def __init__(self, *args, **kwargs):
super(ExampleSpider, self).__init__(*args, **kwargs)
self.page_number = 0
def parse(self, response):
self.page_number += 1
if self.page_number > 5:
raise CloseSpider('Reached maximum page limit')
# Code to parse the response goes here
scrapy.utils.log.LogFormatter: Этот класс используется для настройки форматирования сообщений журнала.
import scrapy
LOG_FORMATTER = 'myproject.logformatter.LogFormatter'
class LogFormatter(scrapy.utils.log.LogFormatter):
def dropped(self, item, exception, response, spider):
return {
'level': self.ERROR,
'exception': exception,
'item': item,
}
scrapy.utils.response.get_base_url: эта функция возвращает базовый URL-адрес ответа.
import scrapy
def parse(self, response):
base_url = scrapy.utils.response.get_base_url(response)
print(base_url) # Output: "http://www.example.com"
scrapy.settings.Settings: этот класс используется для установки и получения настроек Scrapy.
import scrapy
class ExampleSpider(scrapy.Spider):
name = 'example'
custom_settings = {
'DOWNLOAD_DELAY': 1,
'CONCURRENT_REQUESTS': 2,
}
def __init__(self, *args, **kwargs):
super(ExampleSpider, self).__init__(*args, **kwargs)
self.settings = scrapy.settings.Settings()
delay = self.settings.getint('DOWNLOAD_DELAY')
print(delay) # Output: 1
scrapy.utils.response.body_or_str: эта функция возвращает тело ответа в виде байтового объекта или строки, в зависимости от атрибута response.encoding.
import scrapy
def parse(self, response):
body = scrapy.utils.response.body_or_str(response)
print(type(body)) # Output: <class 'bytes'>
scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware: Это промежуточное ПО используется для добавления поддержки прокси в проект Scrapy.
import scrapy
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
}
HTTP_PROXY = 'http://user:[email protected]:8118'
Я надеюсь, что эти примеры помогут вам понять некоторые из расширенных функций Scrapy и то, как вы можете использовать их для создания сложных проектов парсинга веб-страниц.