用LinkExtractor提取链接
1.导入LinkExtractor
2.创建一个LinkExtractor对象,使用一个或多个构造器参数描述提取规则,这里传递给restrict_css参数一个CSS选择器表达式。它描述出下一页链接所在的区域(在li.next下)。
3.调用LinkExtractor对象的extract_links方法传入一个Response对象,该方法依据创建对象时所描述的提取规则,在Response对象所包含的页面中提取链接,最终返回一个列表,其中的每一个元素都是一个Link对象,即提取到的一个链接
4.用links[0]获取Link对象,用其构造Request对象并提交。
import scrapyfrom ..items import BookItem
from scrapy.linkextractors import LinkExtractor
class BookSpiderSpider(scrapy.Spider):
name = 'book_spider'
# allowed_domains = ['http://books.toscrape.com/']
start_urls = ['http://books.toscrape.com//']
def parse(self, response):
for book in response.css('article.product_pod'):
books=BookItem()
books['name']=book.xpath('./h3/a/@title').extract_first()
books['price']=book.css('p.price_color::text').extract_first()
yield books
# next_url=response.css('ul.pager li.next a::attr(href)').extract_first()
# if next_url:
# next_url=response.urljoin(next_url)
# yield scrapy.Request(next_url,callback=self.parse)
le=LinkExtractor(restrict_css='ul.pager li.next')
links=le.extract_links(response)
if links:
next_url=links[0].url
yield scrapy.Request(next_url,callback=self.parse)
参数描述:
参数:
allow (a regular expression (or list of)) – 必须要匹配这个正则表达式(或正则表达式列表)的URL才会被提取。如果没有给出(或为空), 它会匹配所有的链接。
deny (a regular expression (or list of)) – 与这个正则表达式(或正则表达式列表)的(绝对)不匹配的URL必须被排除在外(即不提取)。它的优先级高于 allow 的参数。如果没有给出(或None), 将不排除任何链接。
allow_domains (str or list) – 单值或者包含字符串域的列表表示会被提取的链接的domains。
deny_domains (str or list) – 单值或包含域名的字符串,将不考虑提取链接的domains。
deny_extensions (list) – 应提取链接时,可以忽略扩展名的列表。如果没有给出, 它会默认为 scrapy.linkextractor 模块中定义的 IGNORED_EXTENSIONS 列表。
restrict_xpaths (str or list) – 一个的XPath (或XPath的列表),它定义了链路应该从提取的响应内的区域。如果给定的,只有那些XPath的选择的文本将被扫描的链接。见下面的例子。
tags (str or list) – 提取链接时要考虑的标记或标记列表。默认为 ( ‘a’ , ‘area’) 。
attrs (list) – 提取链接时应该寻找的attrbitues列表(仅在 tag 参数中指定的标签)。默认为 (‘href’)。
canonicalize (boolean) – 规范化每次提取的URL(使用scrapy.utils.url.canonicalize_url )。默认为 True 。
unique (boolean) – 重复过滤是否应适用于提取的链接。
process_value (callable) – 见:class:BaseSgmlLinkExtractor 类的构造函数 process_value 参数。
参考资料:Scrapy官方文档
《精通Scrapy网络爬虫》刘硕 清华大学出版社