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)