解析网页中所有链接的方法——LinkExtractor()详解
LinkExtractor() 是 Scrapy 中一个用于解析网页中所有链接的类,它可以从网页的 HTML 源代码中提取所有的链接,并可以按照特定的规则进行过滤和处理。
LinkExtractor 类的详细用法如下:
1. 导入库
首先,需要导入 scrapy 和 scrapy.linkextractors 这两个库。
import scrapy from scrapy.linkextractors import LinkExtractor
2. 创建 LinkExtractor 实例
然后,创建一个 LinkExtractor 实例,可以设置一些参数来控制链接的提取规则。常用的参数包括:
* allow:包含一个正则表达式列表,提取链接时只会提取与这些正则表达式匹配的链接。例如:allow=['example\.com'] 表示只提取包含 "example.com" 的链接。
* deny:包含一个正则表达式列表,提取链接时不会提取与这些正则表达式匹配的链接。例如:deny=['example\.com/logout'] 表示不提取 "example.com/logout" 的链接。
* allow_domains:包含一个字符串或字符串列表,提取链接时只会提取属于这些域名的链接。例如:allow_domains=['example.com'] 表示只提取属于 "example.com" 的链接。
* deny_domains:包含一个字符串或字符串列表,提取链接时不会提取属于这些域名的链接。例如:deny_domains=['example.com'] 表示不提取属于 "example.com" 的链接。
* restrict_xpaths:一个 XPath 表达式或一个 XPath 表达式列表,提取链接时只会提取与这些 XPath 表达式匹配的链接。例如:restrict_xpaths=['//div[@class="content"]'] 表示只提取 div 标签的 class 为 "content" 的链接。
* restrict_css:一个 CSS 表达式或一个 CSS 表达式列表,提取链接时只会提取与这些 CSS 表达式匹配的链接。例如:restrict_css=['.content'] 表示只提取 class 为 "content" 的链接。
link_extractor = LinkExtractor(allow=r'example\.com', deny=r'example\.com/logout')
3. 提取链接
使用 LinkExtractor 的 extract_links() 方法可以提取链接。此方法接收一个包含网页源代码的字符串作为参数,并返回一个包含所有链接的列表。
html = '<a href="https://example.com">Example</a>' links = link_extractor.extract_links(html)
提取的链接列表中的每个元素都是一个 scrapy.link.Link 对象,可以通过调用其 url、text 和 fragment 属性来分别获取链接的 URL、文本和片段。
for link in links:
url = link.url
text = link.text
fragment = link.fragment
完整使用例子如下:
import scrapy
from scrapy.linkextractors import LinkExtractor
class MySpider(scrapy.Spider):
name = 'example'
start_urls = ['https://www.example.com']
def parse(self, response):
link_extractor = LinkExtractor(allow=r'example\.com', deny=r'example\.com/logout')
links = link_extractor.extract_links(response.body.decode('utf-8'))
for link in links:
url = link.url
text = link.text
fragment = link.fragment
yield {'url': url, 'text': text, 'fragment': fragment}
这个例子定义了一个名为 MySpider 的 Spider 类,start_urls 列表中包含一个起始网页的 URL。通过 parse() 方法来处理下载的网页源代码,实例化一个 LinkExtractor 对象并调用其 extract_links() 方法来提取链接。最后,将提取到的链接的 URL、文本和片段作为字典类型的数据进行返回。
以上就是使用 LinkExtractor() 解析网页中所有链接的方法的详解和使用例子。
