Извлечение ссылок
Извлекатель ссылок — это объект, который извлекает ссылки из ответов.
Метод __init__
LxmlLinkExtractor
принимает настройки, определяющие, какие ссылки могут быть извлечены. LxmlLinkExtractor.extract_links
возвращает список совпадающих объектов Link
из объекта Response
.
Экстракторы ссылок используются в пауках CrawlSpider
через множество объектов Rule
.
Вы также можете использовать экстракторы ссылок в обычных пауках. Например, вы можете создать экземпляр LinkExtractor
в переменной класса вашего паука и использовать его из своих обратных вызовов паука:
def parse(self, response):
for link in self.link_extractor.extract_links(response):
yield Request(link.url, callback=self.parse)
Ссылка на экстрактор ссылок
Класс экстрактора ссылок — scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor
. Для удобства его также можно импортировать как scrapy.linkextractors.LinkExtractor
:
from scrapy.linkextractors import LinkExtractor
LxmlLinkExtractor
- class scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), deny_extensions=None, restrict_xpaths=(), restrict_css=(), tags=('a', 'area'), attrs=('href',), canonicalize=False, unique=True, process_value=None, strip=True)
LxmlLinkExtractor — рекомендуемый инструмент для извлечения ссылок с удобными параметрами фильтрации. Он реализован с использованием надежного HTMLParser lxml.
- Параметры
allow (str or list) – одно регулярное выражение (или список регулярных выражений), которому (абсолютные) URL-адреса должны соответствовать для извлечения. Если не указан (или пуст), он будет соответствовать всем ссылкам.
deny (str or list) – единственное регулярное выражение (или список регулярных выражений), которому должны соответствовать (абсолютные) URL-адреса, чтобы их можно было исключить (т. е. не извлекать). Он имеет приоритет над параметром
allow
. Если не задан (или пуст), ссылки не будут исключены.allow_domains (str or list) – одно значение или список строк, содержащих домены, которые будут учитываться при извлечении ссылок
deny_domains (str or list) – одно значение или список строк, содержащих домены, которые не будут учитываться при извлечении ссылок
deny_extensions (list) – одно значение или список строк, содержащих расширения, которые следует игнорировать при извлечении ссылок. Если не указан, по умолчанию будет
scrapy.linkextractors.IGNORED_EXTENSIONS
. .. versionchanged :: 2.0IGNORED_EXTENSIONS
теперь включает7z
,7zip
,apk
,bz2
,cdr
,dmg
,ico
,iso
,tar
,tar.gz
,webm
иxz
.restrict_xpaths (str or list) – is an XPath (or list of XPath’s) which defines regions inside the response where links should be extracted from. If given, only the text selected by those XPath will be scanned for links. See examples below.
restrict_css (str or list) – селектор CSS (или список селекторов), который определяет области внутри ответа, из которых должны быть извлечены ссылки. Имеет то же поведение, что и
restrict_xpaths
.restrict_text (str or list) – одно регулярное выражение (или список регулярных выражений), которому должен соответствовать текст ссылки, чтобы его можно было извлечь. Если не указан (или пуст), он будет соответствовать всем ссылкам. Если указан список регулярных выражений, ссылка будет извлечена, если она соответствует хотя бы одному.
tags (str or list) – тег или список тегов, которые следует учитывать при извлечении ссылок. По умолчанию
('a', 'area')
.attrs (list) – атрибут или список атрибутов, которые следует учитывать при поиске ссылок для извлечения (только для тех тегов, которые указаны в параметре
tags
). По умолчанию('href',)
canonicalize (bool) – канонизировать каждый извлеченный URL (используя w3lib.url.canonicalize_url). По умолчанию
False
. Обратите внимание, что canonicalize_url предназначен для проверки дублирования; он может изменить URL-адрес, видимый на стороне сервера, поэтому ответ может отличаться для запросов с каноническими и необработанными URL-адресами. Если вы используете LinkExtractor для перехода по ссылкам, более надежным будет оставить значение по умолчаниюcanonicalize=False
.unique (bool) – следует ли применять двойную фильтрацию к извлеченным ссылкам.
process_value (collections.abc.Callable) – функция, которая получает каждое значение, извлеченное из тега и отсканированных атрибутов, и может изменять значение и возвращать новое, или возвращать
None
, чтобы полностью игнорировать ссылку. Если не указан,process_value
по умолчаниюlambda x: x
. .. highlight :: html Например, чтобы извлечь ссылки из этого кода:: <a href=»javascript:goToPage(„../other/page.html“); return false»>Текст ссылки </a> .. highlight :: python Вы можете использовать следующую функцию вprocess_value
:: def process_value(value): m = re.search(»javascript:goToPage(„(.*?)“», value) if m: return m.group(1)strip (bool) – следует ли удалять пробелы из извлеченных атрибутов. Согласно стандарту HTML5, начальные и конечные пробелы должны быть удалены из атрибутов
href
<a>
,<area>
и многих других элементов, атрибутаsrc
элементов<img>
,<iframe>
и т. д., поэтому LinkExtractor по умолчанию удаляет пробелы. Устанавливаетstrip=False
, чтобы отключить его (например, если вы извлекаете URL-адреса из элементов или атрибутов, которые допускают начальные / конечные пробелы).