Scrapy - экстракторы ссылок

Описание

Как видно из названия, экстракторы ссылок - это объекты, которые используются для извлечения ссылок с веб-страниц с помощью scrapy.http.Responseобъекты. В Scrapy есть встроенные экстракторы, такие какscrapy.linkextractors импорт LinkExtractor. Вы можете настроить собственный экстрактор ссылок в соответствии с вашими потребностями, реализовав простой интерфейс.

Каждый экстрактор ссылок имеет общедоступный метод, называемый extract_linksкоторый включает объект Response и возвращает список объектов scrapy.link.Link. Вы можете создать экземпляры экстракторов ссылок только один раз и вызвать метод extract_links несколько раз для извлечения ссылок с разными ответами. Класс CrawlSpider использует экстракторы ссылок с набором правил, основной целью которых является извлечение ссылок.

Справочник по встроенному экстрактору ссылок

Обычно экстракторы ссылок группируются с помощью Scrapy и предоставляются в модуле scrapy.linkextractors. По умолчанию, экстрактором ссылок будет LinkExtractor, который по функциональности равен LxmlLinkExtractor -

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 = True, unique = True, process_value = None)

LxmlLinkExtractor является весьма рекомендуемым ссылка экстрактор, потому что она имеет удобные опции фильтрации и используется с надежной HTMLparser LXML в.

Старший Нет Параметр и описание
1

allow (регулярное выражение (или список))

Это позволяет одно выражение или группу выражений, которые должны соответствовать URL-адресу, который нужно извлечь. Если он не упоминается, он будет соответствовать всем ссылкам.

2

deny (регулярное выражение (или список))

Он блокирует или исключает одно выражение или группу выражений, которые должны соответствовать URL-адресу, который не должен быть извлечен. Если он не упомянут или оставлен пустым, нежелательные ссылки не будут удалены.

3

allow_domains (str или список)

Он позволяет использовать одну строку или список строк, которые должны соответствовать доменам, из которых должны быть извлечены ссылки.

4

deny_domains (str или список)

Он блокирует или исключает одну строку или список строк, которые должны соответствовать доменам, из которых не следует извлекать ссылки.

5

deny_extensions (список)

Блокирует список строк с расширениями при извлечении ссылок. Если он не задан, то по умолчанию он будет установлен на IGNORED_EXTENSIONS, который содержит предопределенный список в пакете scrapy.linkextractors .

6

restrict_xpaths (str или список)

Это область списка XPath, из которой извлекаются ссылки из ответа. Если задано, ссылки будут извлечены только из текста, выбранного XPath.

7

restrict_css (str или список)

Он ведет себя аналогично параметру restrict_xpaths, который извлекает ссылки из выбранных CSS областей внутри ответа.

8

tags (str или список)

Отдельный тег или список тегов, которые следует учитывать при извлечении ссылок. По умолчанию это будет ('a', 'area').

9

attrs (список)

При извлечении ссылок следует учитывать один атрибут или список атрибутов. По умолчанию это будет ('href',).

10

canonicalize (логическое)

Извлеченный URL приводится в стандартную форму с помощью scrapy.utils.url.canonicalize_url . По умолчанию это будет True.

11

unique (логическое)

Он будет использован, если извлеченные ссылки будут повторяться.

12

process_value (вызываемый)

Это функция, которая получает значение из отсканированных тегов и атрибутов. Полученное значение может быть изменено и возвращено, иначе ничего не будет возвращено для отклонения ссылки. Если не используется, по умолчанию будет лямбда x: x.

пример

Следующий код используется для извлечения ссылок -

<a href = "javascript:goToPage('../other/page.html'); return false">Link text</a>

Следующая функция кода может использоваться в process_value -

def process_value(val): 
   m = re.search("javascript:goToPage\('(.*?)'", val) 
   if m: 
      return m.group(1)